我有一个非常标准的"append only“表,使用Amazon Redshift将created_at和group_name作为列。
我想按组生成过去时间范围的前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范围的过滤出现了两次,如果需要更改就会引起问题。
有没有办法让这个查询更优雅(理想情况下只使用一次时间过滤器)?
https://stackoverflow.com/questions/41342713
复制相似问题