Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите разобраться с запросом  [new]
Vaspvort
Member

Откуда:
Сообщений: 4
Здравствуйте! Прошу помощи составить запрос.
Имеется база base на MSSQL 2014
В одной таблице товар, во второй цена и дата установки этой цены. Последняя цена актуальна.
Удалять(менять) в таблицах ничего нельзя.

Таблица t
idtovar
id1Хлеб
id2Молоко
id3Яйца
id4Черный хлеб


Таблица p
iddateprice
id12016010120
id12016060125
id12018010124
id22016010231
id22016070133
id22018020334
id22018032535
id32016081242
id32017123045
id42017072122
id42018041426
id42018061425


Требуется вывести товар с актуальной ценой
Вот так
tovarprice
Хлеб24
Молоко35
Яйца45
Черный хлеб25


Сделал такой запрос, но это не то что нужно.
SELECT
	[tovar]
	,[p].[price]
	,MAX([p].[date])
FROM [base].[t]
JOIN [p] ON [t].[id] = [p].[id]
GROUP BY [tovar], [p].[price]
14 июн 18, 15:24    [21491250]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с запросом  [new]
iap
Member

Откуда: Москва
Сообщений: 46951
SELECT t.id,t.tovar,P.price
FROM t
CROSS APPLY (SELECT TOP(1) p.price FROM p WHERE p.id=t.id ORDER BY p.[date] DESC) P;
14 июн 18, 15:49    [21491346]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с запросом  [new]
Щукина Анна
Member

Откуда:
Сообщений: 1466
Vaspvort,

STFF - простая задача
14 июн 18, 16:10    [21491404]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с запросом  [new]
Vaspvort
Member

Откуда:
Сообщений: 4
iap,

Ваш запрос выдал
idtovarprice
id1Хлеб25
14 июн 18, 16:56    [21491554]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с запросом  [new]
Щукина Анна
Member

Откуда:
Сообщений: 1466
Vaspvort
iap,

Ваш запрос выдал
idtovarprice
id1Хлеб25
Тут два варианта:
1) У вас "кривые" данные, запрос работает корректно
2) Данные в порядке, но вы "криво" адаптировали запрос под свои реалии.

В целом, направление для поиска вам было задано. Пишите свои версии запросов. Если не будет получаться - милости просим с конкретными вопросами... А пока получилось так: "вы что-то не так за меня сделали, я недоволен"
14 июн 18, 18:24    [21491830]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с запросом  [new]
982183
Member

Откуда: VL
Сообщений: 3349
Пойди по более длинному пути, дабы понять логику.
Сделай временную таблицу с последней/актуальной ценой на товар.

А потом уже объединяй всё это в один запрос.
15 июн 18, 02:39    [21492502]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с запросом  [new]
Vaspvort
Member

Откуда:
Сообщений: 4
iap,
982183,

Спасибо за ответы. Все от недостатка образования. Таблиц, с которыми нужно работать на много больше чем 2.
С помощью CROSS APPLY я научился работать с 2-мя таблицами. А как с большим количеством?

Как можно заставить работать такой запрос если раскомментировать строки?

SELECT TOP 10000 [_IDRRef]
      ,[_Description]
	 -- ,[_InfoRg8291].[_Fld8296]
	 ,[_AccumRgT9094].[_Fld9092]
  FROM [center].[dbo].[_Reference80]
  --CROSS APPLY (SELECT TOP 1 [_Fld8296]
  --FROM [center].[dbo].[_InfoRg8291]
  --WHERE [_Fld8293RRef] = [_IDRRef]
  --ORDER BY [_Period] DESC
  --) _InfoRg8291;
  CROSS APPLY (SELECT TOP 1 [_Fld9092]
  FROM [center].[dbo].[_AccumRgT9094]
  WHERE [_Period] > '5899-11-01 00:00:00.000'
  AND ([_Fld9087RRef] = 0xBDE9005056C0000811E6DF0F7DA1F0FF OR [_Fld9087RRef] = 0xB76188AE1D8D363D11E5AC8294CADC53)
  AND [_Fld9092] > 0
  AND [_Fld9088RRef] = [_IDRRef]
  ) _AccumRgT9094;
16 июн 18, 15:13    [21496133]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться с запросом  [new]
Vaspvort
Member

Откуда:
Сообщений: 4
Точку с запятой ; в 10 строчке убрал))) Все Гуд!
16 июн 18, 15:41    [21496164]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить