kot_tok_ok
@kot_tok_ok
Zzz...

Как получить последнюю запись по последней дате?

Есть таблица tb.SO к которой я присоединяю ещё две таблицы через left join:
В таблице tb.Price записи по полям ID Brewery и Product code повторяются, меняться только цена и ID периода (в этой таблице 25мил записей)
В таблице tb.Period даты проливки цен
В результате нужно сделать выборку товаров только по последней дате (Period ID или Date Period) с ценой (Product price)
600914ebe7c19674206321.png
  • Вопрос задан
  • 105 просмотров
Пригласить эксперта
Ответы на вопрос 2
rozhnev
@rozhnev
Fullstack programmer, DBA, медленно, дорого
Проверьте следующий подход:
SELECT * FROM (
  SELECT
	  IDBrewery,
	  ProductCode,
	  ProductPrice,
	  PeriodDate,
	  ROW_NUMBER() OVER (PARTITION BY ProductCode ORDER BY PeriodDate DESC) RN
  FROM Price
  JOIN Period ON Period.PeriodID = Price.PeriodID
) LastPrice
WHERE RN = 1
;


MSSQL fiddle here
Ответ написан
kot_tok_ok
@kot_tok_ok Автор вопроса
Zzz...
Моё решение:

SELECT 
	 q.ID Brewery
	,q.Product code
	,q.Product price
	,q.Date Period
FROM 
	(
		SELECT DISTINCT
				,s.ID Brewery
				,s.Product code
				,MAX (pr.Date Period) OVER (PARTITION BY q.ID Brewery, q.Product code) AS j
		FROM [SO] s
		LEFT JOIN [Price] pr
		ON 		s.ID Brewery = pr.ID Brewery
		AND		s.Product code = pr.Product code

	) q
LEFT JOIN [Price] pr2
ON 		pr2.ID Brewery = q.ID Brewery
AND		pr2.Product code = q.Product code
AND		pr2.Date Period = q.Date Period


Slava Rozhnev Спасибо за оперативность и помошь)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы