#sql #sql-server #partition
#sql #sql-сервер #раздел
Вопрос:
У меня есть таблица со строками, которые выглядят следующим образом:
DateTime, Field1, Field2, Field3
Я хочу получить 3 лучшие записи по дате, по дням. Для одной записи я бы выполнил
SELECT TOP(3) *
FROM tum
Мне это нужно на каждый день. Я предполагаю, что я бы использовал раздел или перекрестное применение, но фактический синтаксис для этого мне не ясен.
Комментарии:
1.
TOP
безORDER BY
не имеет смысла.
Ответ №1:
Вы бы использовали row_number()
:
select t.*
from (select t.*,
row_number() over (partition convert(date, datetime) order by ?) as seqnum
from t
) t
where seqnum <= 3;
Комментарии:
1. Этот синтаксис не кажется правильным. row_number принимает 0 аргументов.
2. @JeremyReynolds . . . . Да? Нет аргументов.