我有一个事务表,其中包含事务的时间戳和其他列,如下所示。
transaction_timestamp | column_1 | column_2....
--------------------------------------------------
2023-01-01 15:03:00 | some_data | some_data ...
2023-01-02 17:03:00 | some_data | some_data ...
通过此表,我想创建一个报告,提供两个日期之间按小时划分的
MAX
和 MIN
事件数。像这样的东西:
hour | min | max
----------------
14:00 | 200 | 550
15:00 | 300 | 700
16:00 | 150 | 300
一天 24 小时内的每个小时依此类推。
我可以按小时计算一天内发生的事件数量:
SELECT HOUR(transaction_timestamp),
COUNT(*)
FROM my_table
GROUP BY HOUR(transaction_timestamp)
ORDER BY HOUR(transaction_timestamp)
获得这样的东西:
hour | count
-------------
14:00 | 100
15:00 | 304
16:00 | 105
我知道这个数据结构可以作为获取几天内的最大值和最小值的输入。但我不知道如何在我想在一个查询中创建报告的日期之间的每一天对此查询进行切片
我正在使用 PrestoSQL,但其他引擎是否支持答案并不重要。
感谢您的帮助
要获取两个日期之间每天和每小时的计数,只需将
date_trunc()
函数包含到现有查询中,例如:
SELECT
date_trunc('day', transaction_timestamp) as day
, HOUR(transaction_timestamp) as hr
, COUNT(*) as num_trans
FROM my_table
WHERE transaction_timestamp >= start_ts
AND transaction_timestamp < finish_ts
GROUP BY
date_trunc('day', transaction_timestamp)
, HOUR(transaction_timestamp)
ORDER BY
date_trunc('day', transaction_timestamp)
, HOUR(transaction_timestamp)