Как я могу получить значение для столбца, который не содержится в группе (SQL Server) - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть таблица, которая содержит три столбца (Name, Value, Date), и мне нужно получить последнее значение для каждого имени.

Это полная таблица:

Name   | Value | Date  
-------+-------+-----------
aaaaa  | 1     | 01-01-2018  
bbbbb  | 2     | 02-01-2018  
aaaaa  | 2     | 03-01-2018
bbbbb  | 1     | 04-01-2018

ЭтоВот результат, который мне нужен:

Name   | Value | Date  
-------+-------+-----------
aaaaa  | 2     | 03-01-2018
bbbbb  | 1     | 04-01-2018

Я попробовал несколько вещей (группировка, пере (раздел), ...), но я не могу понять, как это сделать.

Может ли кто-нибудь мне помочь?

Ответы [ 3 ]

0 голосов
/ 21 сентября 2018

Использовать функцию row_number ():

select * from 
(
select name, value, row_number() over(partition by name order by date desc) as rn
)a where rn=1
0 голосов
/ 21 сентября 2018

Я бы просто использовал коррелированный подзапрос:

select t.*
from t
where t.date = (select max(t2.date) from t t2 where t2.name = t.name);

При индексе (name, date) это часто будет иметь лучшую производительность, чем другие методы.

0 голосов
/ 21 сентября 2018

используйте оконную функцию

select * from 
(select *, row_number over(partition by name order by date desc) as rn
) t where rn=1

или связанный подзапрос

select * from t t1
where t.date in (select max(date) from t where t2.name=t1.name group by t2.name)

или вы можете использовать

select TOP(1) with ties *
from t 
order by (row_number() over(partition by name order by date DESC));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...