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