Мне нужно выбрать последнее значение для group_id
, упорядоченного по id
из следующей примерной таблицы:
drop table if exists #temp1
create table #temp1 (group_id int, id int, val varchar(10))
insert into #temp1 values (1111, 1, 'Yes')
insert into #temp1 values (1111, 2, 'No')
insert into #temp1 values (1111, 3, NULL)
insert into #temp1 values (2222, 5, 'No')
insert into #temp1 values (2222, 3, NULL)
insert into #temp1 values (2222, 1, 'No')
Ожидаемый результат: 1111 - Yes
и 2222 - No
.
Если я напишу следующий запрос, он, похоже, выберет последнее значение в зависимости от того, как строки упорядочены в таблице, а не по столбцу id
.
SELECT group_id, MAX(last_val)
FROM
(
SELECT a.group_id, LAST_VALUE(a.val) OVER (PARTITION BY a.group_id ORDER BY a.group_id) AS last_val FROM #temp1 a
) a
GROUP BY group_id
Если я напишу следующее, кажется, он делает Max
из val
по алфавиту:
SELECT group_id, MAX(last_val)
FROM
(
SELECT a.group_id, LAST_VALUE(a.val) OVER (PARTITION BY a.group_id ORDER BY a.id) AS last_val FROM #temp1 a
) a
GROUP BY group_id
В обоих случаях результаты отличаются от того, что мне нужно. Может кто-нибудь подсказать, как получить val
за последний id
?