在给定的日期时间范围内每小时运行一次单行查询

问题描述

我的应用程序基于某些启发式功能,对我不断变化的数据集的一部分进行每小时一次的分析,所有部分更新都保存在一个大表中。因此,对于每个分区,分析都是以不规则的间隔触发的。

在访问有关单个分区的数据时,查询通常是高性能的。但是,新请求的功能之一是图表,它显示了总体趋势。对于给定期间的每个小时,我需要汇总每个分区到该时间点的最新可用数据。

在任何给定时间内获取汇总数据相对简单:

select
    max(t.timestamp) as analysis_timestamp,sum(t.column1) as aggregate1,sum(t.column2)/sum(t.column3) as aggregate2,from (
    select max(id) as last_id,partition_key from my_table
    where timestamp < '2020-08-01 12:00:00' group by partition_key
) as latest
    left join my_table t on latest.last_id = t.id;

这将返回在查询中设置的时间戳具有正确值的行:

 analysis_timestamp         | aggregate1        | aggregate2
----------------------------+-------------------+--------------------
 2020-08-01 11:35:24.138942 | 4529383.990000015 | 1.0644286969003778

我想获得多行,每整整一个小时用作子查询中某个范围的时间戳记过滤器。例如,对于2020-08-01 12:00:00-2020-08-02 12:00:00范围:

 analysis_timestamp         | aggregate1        | aggregate2
----------------------------+-------------------+--------------------
 2020-08-01 11:35:24.138942 | 4529383.990000015 | 1.0644286969003778
 2020-08-01 12:38:29.357938 | 4321691.210000011 | 1.0643205989383653
 2020-08-01 13:36:48.153008 | 4320697.810000006 | 1.064240032298849
 ...
 2020-08-02 10:43:17.777413 | 4320374.999999988 | 1.0644218979245774
 2020-08-02 11:41:55.142559 | 4321029.210000006 | 1.0644020500213083

我发现我可以通过1小时的粒度遍历时间戳范围

select timestamp_filter from generate_series(
    datetime_pl('2020-08-01','12:00:00'),datetime_pl('2020-08-02','1 hour'
) as timestamp_filter;

但是我不知道如何在以上查询的上下文中使用此timestamp_filter。如何才能做到这一点?该查询很少被请求,并且它的性能不是关键任务,因此仅针对此用例进行优化的非规范化是不值得的。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)