Фильтр по дате во временной таблице
Присутствует примерно следующий запрос:
CREATE TABLE #Productr (date_time date, id varchar(50), type varchar(50));
INSERT INTO #Productr VALUES
('2020-07-01', '11', 'PC'),
('2021-02-09', '11', 'Printer'),
('2019-01-29', '22', 'Phone'),
('2018-03-14', '22', 'Charger'),
('2020-04-19', '22', 'Phone');
--select * from #Productr
--drop table #Productr
Подскажите, каким образом я могу с помощью временной таблицы достать заявки, кроме последних по дате? Что хочу получить на выходе:
date_time id type
2020-07-01 11 PC
2019-01-29 22 Phone
2018-03-14 22 Charger
Ответы (1 шт):
Автор решения: teran
→ Ссылка
исходные
declare @t table (d date, id varchar(50), t varchar(50));
INSERT INTO @t VALUES
('2020-07-01', '11', 'PC'),
('2021-02-09', '11', 'Printer'),
('2019-01-29', '22', 'Phone'),
('2018-03-14', '22', 'Charger'),
('2020-04-19', '22', 'Phone');
Способ первый - найти максимальные даты товаров, сделать джойн с условием, что нужна дата меньше максимальной.
SELECT t.*
FROM @t as t
INNER JOIN (
SELECT id, max(d) AS d
FROM @t
GROUP BY id
) AS m ON ( m.id = t.id and t.d < m.d )
Способ второй - пронумеровать все строки по убыванию даты в группах для каждого товара. Исключить строки с первым номером из выборки
WITH x AS (
select d, id, t, row_number() over (partition by id order by d desc) as rn
from @t
)
SELECT d, id, t
FROM x
WHERE rn > 1