平均值的窗口函数



我有这个表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)

最新更新