Звуки , как будто на (owner, month, job)
может быть несколько строк, и вы хотите работать с максимальной продолжительностью в месяц для каждого задания.
Если это так, сначала агрегированные вычисления max(duration)
, затем используйте row_number()
поверх него:
SELECT job, month, max_duration
FROM (
SELECT month, job, max(duration) AS max_duration
, row_number() OVER (PARTITION BY month ORDER BY max(duration) DESC NULLS LAST) AS rn
FROM run_history
WHERE owner = 'john'
AND month < to_char(CURRENT_DATE, 'yyyymm')
GROUP BY month, job
) sub
WHERE rn <= 10
ORDER BY month DESC, rn;
В сторону: рассмотрите integer
или date
вместо text
для столбца month
: чище и эффективнее.