gpt4 book ai didi

sql - 按 60 分钟持续时间对记录进行分组,从第一条记录的时间戳开始小时

转载 作者:行者123 更新时间:2023-11-29 13:48:42 25 4
gpt4 key购买 nike

我有一个按小时对记录进行分组的查询,如下所示:

select date_trunc('hour', insert_time), 
file_type,
avg(file_size)
from my_table
where insert_time > now()::timestamp - interval '7 days'
group by 1, 2 order by 1, 2

这会将记录分组到一个小时的窗口中,每个小时窗口从 第 0 分钟开始。

此要求的一些背景知识:我有一个导致填充数据库的自动化测试。在我的测试开始之前,数据库中可能已经有一些记录。我的自动化测试的目标是每小时执行一定数量的任务。我正在寻找一种方法来验证我的测试的准确性,方法是每小时在数据库中生成一个报告,其中小时从第一条记录的时间戳(分钟)开始匹配条件(我可以定义一个条件来匹配由发送的自定义字符串我的自动化,所以它会拾取自动化发送的第一条记录)

因此,目标是按小时对记录进行分组,但应该以符合 WHERE 条件的第一条记录的分钟为起点来计算小时。

因此,如果由于我的自动化而插入的第一条记录具有时间戳 2017-06-06 07:47:04.012734,那么分组应该像这样发生:

1st group => 2017-06-06 07:47:04.012734 to 2017-06-06 08:47:04.012734
2nd group => 2017-06-06 08:47:04.012734 to 2017-06-06 09:47:04.012734
3rd group => 2017-06-06 09:47:04.012734 to 2017-06-06 10:47:04.012734
.
.
.

提前致谢!

最佳答案

一种方法是首先读取第一条记录的时间戳。然后从其他值中减去它,截断到一小时的精度并将其加回去。

WITH
CTE_MinTime
AS
(
select
MIN(insert_time) AS MinTime
from my_table
where insert_time > now()::timestamp - interval '7 days'
)
select
CTE_MinTime.MinTime + date_trunc('hour', insert_time - CTE_MinTime.MinTime),
file_type,
avg(file_size)
from
my_table
CROSS JOIN CTE_MinTime
where insert_time > now()::timestamp - interval '7 days'
group by 1, 2
order by 1, 2
;

您可以将 MinTime 保存到某个变量而不是使用子查询。

关于sql - 按 60 分钟持续时间对记录进行分组,从第一条记录的时间戳开始小时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44395592/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com