#sql #postgresql
#sql #postgresql
Вопрос:
У меня есть запрос, который возвращает данные для каждого дня недели
day1 result result
day2 result result
day3 result result
каждый день содержит сотни строк результатов, но я хочу видеть только 10 лучших из них, но для каждого дня.
Итак, в качестве примера, если бы я хотел получить только 3 лучших результата за каждый день, это выглядело бы так.
day1 result result
day1 result result
day1 result result
day2 result result
day2 result result
day2 result result
day3 result result
day3 result result
day3 result result
в основном мои знания о функции ограничения доходят только до того, что говорят: «если я ограничу 10, я просто дам мне первые 10 строк, которые все с 1-го дня»
Я застрял на этом этапе
Комментарии:
1. Какую СУБД вы используете?
2. я использую postgres
Ответ №1:
Вы можете использовать row_number()
:
select t.*
from (select t.*,
row_number() over (partition by day order by ?) as seqnum
from t
) t
where seqnum <= 10;
Это ?
для столбца, который определяет, как вы определяете топ-10.
Комментарии:
1. Мне требуется выполнить группировку по датам — это делается внутри раздела?
2. @j_nj работает для меня. Пожалуйста, покажите определение таблицы, инструкцию, которую вы выполнили, и точное сообщение об ошибке.
3. @j_nj . , , В этом ответе нет агрегации. И нет никаких предположений о том, что для вашего вопроса требуется агрегирование. Итак,
group by
не должно быть необходимости.4. я думаю, мне нужно предоставить больше информации. Я группирую результаты по дням, по лицам (столбец 2) и по сумме (столбец 3). Итак, если у меня 500 человек в день, и у каждого человека может быть несколько транзакций, я хочу фиксировать все суммы для этого человека по дням, а затем извлекать 10 лучших за каждый день
5. @GordonLinoff можете ли вы здесь помочь?