#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