Sql Postgres查询-计算最忙的1小时周期
我有一个记录机场航班的表,每个航班有一行,包括一个时间戳字段takeOffTime 我想找到最繁忙的滚动1小时窗口。我的第一次尝试是这样的Sql Postgres查询-计算最忙的1小时周期,sql,postgresql,Sql,Postgresql,我有一个记录机场航班的表,每个航班有一行,包括一个时间戳字段takeOffTime 我想找到最繁忙的滚动1小时窗口。我的第一次尝试是这样的 select count(*), date_trunc('hour', takeOffTime) from flight group by date_trunc('hour', takeOffTime) order by 2 然而,这里有一个大问题。我可以使用上面的方法来发现日历上最忙的时间,即从一个小时标记到下一个小时标记的最忙时间 我真正想要的是找
select count(*), date_trunc('hour', takeOffTime)
from flight
group by date_trunc('hour', takeOffTime)
order by 2
然而,这里有一个大问题。我可以使用上面的方法来发现日历上最忙的时间,即从一个小时标记到下一个小时标记的最忙时间
我真正想要的是找到最繁忙的1小时滚动窗口。例如,对于我的一个数据集,我知道最忙的日历小时是从上午11点到12点,但是我也知道(使用铅笔和纸)在同一天最忙的滚动1小时窗口是从11:13:48到12:13:48。如何编写SQL查询来给出这个答案
谢谢
数据和示例
DROP TABLE flight;
CREATE TABLE flight (takeoffTime timestamp);
INSERT INTO flight VALUES
('2018-04-28 12:05'),
('2018-04-28 13:05'),
('2018-04-28 14:01'),
('2018-04-28 15:05'),
('2018-04-28 16:05');
运行我的原始查询
select count(*), date_trunc('hour', takeOffTime)
from flight
group by date_trunc('hour', takeOffTime)
order by 2;
它会告诉你每小时有一次航班。然而,仔细看一下实际数据,你会发现最繁忙的1小时时间实际上是在13:05和14:05之间,当时有两个航班——正如Gordon的回答所揭示的那样。一种方法是使用自连接和聚合:
select f.takeOffTime, count(*) as cnt
from flight f join
flight f2
on f2.takeOffTime >= f.takeOffTime and
f2.takeOffTime < f.takeOffTime + interval '1 hour'
group by f.takeOffTime
order by 2 desc
limit 1;
选择f.起飞时间,计数(*)为cnt
从f航班起飞加入
f2航班
在f2.takeOffTime>=f.takeOffTime和
f2.起飞时间
这不是非常有效。使用样本数据和预期结果更新问题。