Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Postgres查询-计算最忙的1小时周期_Sql_Postgresql - Fatal编程技术网

Sql Postgres查询-计算最忙的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 然而,这里有一个大问题。我可以使用上面的方法来发现日历上最忙的时间,即从一个小时标记到下一个小时标记的最忙时间 我真正想要的是找

我有一个记录机场航班的表,每个航班有一行,包括一个时间戳字段takeOffTime

我想找到最繁忙的滚动1小时窗口。我的第一次尝试是这样的

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.起飞时间

这不是非常有效。

使用样本数据和预期结果更新问题。