我有一個漂亮的標準「僅追加」表,其中created_at
和group_name
爲使用Amazon Redshift的列。SQL:排名/按總排名篩選
我想在過去的[時間範圍]中按組生成時間序列的前N行。
目前我使用這個:
SELECT
date_trunc('day', created_at) AS timeseries,
my_table.group_name,
COUNT(*) AS count
FROM
my_table
JOIN (
SELECT
group_name,
ROW_NUMBER() OVER (ORDER BY COUNT(*) DESC) AS rank
FROM
my_table
WHERE
created_at > (CURRENT_DATE - INTERVAL '1 days')
GROUP BY
group_name
) ranking ON (ranking.group_name = my_table.group_name)
WHERE
created_at > (CURRENT_DATE - INTERVAL '1 days')
GROUP BY
timeseries,
my_table.group_name,
ranking.rank
HAVING
ranking.rank <= 5
ORDER BY
timeseries DESC
這是很容易出錯的改變,因爲created_at
範圍的過濾出現兩次,造成問題,如果它需要改變。
有沒有辦法使這個查詢更優雅(理想情況下使用時間過濾器只有一次)?
你想每組前5行?這似乎選擇行數最多的前5個組。 – systemjack