两个日期之间按小时计算的最大和最小事件

问题描述 投票:0回答:1

我有一个事务表,其中包含事务的时间戳和其他列,如下所示。

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,但其他引擎是否支持答案并不重要。

感谢您的帮助

sql group-by max presto min
1个回答
0
投票

要获取两个日期之间每天和每小时的计数,只需将

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)

参见:https://prestodb.io/docs/current/functions/datetime.html

© www.soinside.com 2019 - 2024. All rights reserved.