我有这个表timestamp_table
,我使用的是Presto SQL
timestamp | id
2021-01-01 10:00:00 | 2456
我想计算过去24小时和48小时内唯一ID的数量,我认为这可以通过窗口函数实现,但我很难。这是我提出的解决方案,但它需要工作
SELECT COUNT(id(OVER(按时间戳划分,按间隔"24"小时前一行和当前行之间的时间戳范围排序(
您可能会因为PARTITION BY
子句而遇到问题,因为COUNT
只适用于相同timestamp
值内的行。
试试这样的东西,作为一个起点:
小提琴
SELECT *
, COUNT(id) OVER (ORDER BY timestamp RANGE BETWEEN INTERVAL '24' HOUR PRECEDING AND CURRENT ROW)
, MIN(id) OVER (ORDER BY timestamp RANGE BETWEEN INTERVAL '24' HOUR PRECEDING AND CURRENT ROW)
FROM tbl
;
我认为不能通过一次表扫描来获得两个时间间隔的数据。因为最后24小时内的行必须同时在两组中:24小时和48小时。所以你必须做两个请求或联合它们。
select 'h24', count(distinct id)
from timestamp_table
where timestamp < current_timestamp and timestamp >= date_add(day, -1, current_timestamp)
union all
select 'h48', count(distinct id)
from timestamp_table
where timestamp < current_timestamp and timestamp >= date_add(day, -2, current_timestamp)