【发布时间】:2017-06-06 16:47:08
【问题描述】:
我有一个按小时对记录进行分组的查询,如下所示:
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
这会将记录分组为一小时窗口,其中每个小时窗口从0th 分钟开始。
此要求的一些背景知识:我有一个自动测试导致数据库被填充。在我的测试开始之前,数据库中可能已经有一些记录。我的自动化测试的目标是每小时完成一定数量的任务。我正在寻找一种方法来验证我的测试的准确性,方法是在数据库中为每个小时生成一个报告,其中小时从匹配条件的第一条记录的时间戳(分钟)开始(我可以定义一个条件来匹配由发送的自定义字符串我的自动化,所以它会拾取自动化发送的第一条记录)
因此,我们的目标是按小时对记录进行分组,但应以符合 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
.
.
.
提前致谢!!
【问题讨论】:
-
您可以添加一个子查询,根据您的条件选择第一个测试时间,并从 date_trunc 函数中获取它,例如
select date_trunc('hour', first_date).......... from my_table, (select min(insert_time) as first_date from .....) a where.... group by 1, 2 .....
标签: sql postgresql