Группа SQL Server по максимальной дате

#sql #sql-server #tsql

#sql #sql-сервер #tsql

Вопрос:

Я пытаюсь выяснить, как написать SQL-запрос. У меня есть такие данные:

введите описание изображения здесь

Я хотел бы сгруппировать по идентификатору места и получить количество для максимальной даты. Поэтому я ожидаю, что мой результат будет выглядеть так:

введите описание изображения здесь

Комментарии:

1. Итак, что вы пробовали до сих пор, почему это не сработало? Что не так с метко названными MAX COUNT функциями and ?


Ответ №1:

Один метод использует dense_rank() :

 select venue_id, date, count(*)
from (select t.*,
             dense_rank() over (partition by venue_id order by date desc) as seqnum
      from t
     ) t
where seqnum = 1
group by venue_id, date;
 

Забавный трюк: вам не нужен подзапрос:

 select top (1) with ties venue_id, date, count(*)
from t
group by venue_id, date
order by row_number() over (partition by venue_id order by date desc);
 

Ответ №2:

Вы можете использовать ROW_NUMBER() с разделением по.

 SELECT VenueId, Date as MaxDate, ItemCount
from
(
SELECT VenueId, Date, ItemId, ItemCount, row_number() over(partition by venueId ORDER BY Date DESC) AS rnk 
from table) as t
WHERE rnk = 1