Запрос Postgres - вычисление наиболее загруженного 1-часового периода - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть таблица, в которой записываются полеты с аэродрома, она имеет одну строку на рейс и включает поле отметки времени 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, когда есть два рейса - как показывает ответ Гордона.

1 Ответ

0 голосов
/ 30 апреля 2018

Один из методов заключается в использовании самостоятельного объединения и агрегирования:

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;

Это не очень эффективно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...