Как правильно агрегировать дату в базе данных PostgreSQL? - PullRequest
0 голосов
/ 25 октября 2018

У меня есть таблица в базе данных PostgreSQL .

В таблице ниже представлена ​​почасовая скорость движения поездов на каждой станции метро городов Англии:

DATE_KEY            | STATION    | CITY      | SPEED
-------------------------------------------------------
2018-10-01 00:00:00 | Arsenal    | London    | 1078.125
2018-10-01 01:00:00 | Arsenal    | London    | 877.222
2018-10-01 02:00:00 | Arsenal    | London    | 1127.752
2018-10-01 00:00:00 | Beckton    | London    | 2866.375
2018-10-01 01:00:00 | Beckton    | London    | 1524.375
2018-10-01 02:00:00 | Beckton    | London    | 1618.533
2018-10-01 00:00:00 | Chesham    | Liverpool | 1567.588
2018-10-01 01:00:00 | Chesham    | Liverpool | 792.333
2018-10-01 02:00:00 | Chesham    | Liverpool | 1138.857
2018-10-01 00:00:00 | Farringdon | Liverpool | 1543.625
2018-10-01 01:00:00 | Farringdon | Liverpool | 538.666
2018-10-01 02:00:00 | Farringdon | Liverpool | 1587.583

Я пытаюсь получить агрегированные данные следующим образом:

DATE_KEY            | CITY      | AVG_SPEED
----------------------------------------------------
2018-10-01 00:00:00 | London    | 852.125
2018-10-01 01:00:00 | London    | 750.222
2018-10-01 02:00:00 | London    | 625.752
2018-10-01 00:00:00 | Liverpool | 804.588
2018-10-01 01:00:00 | Liverpool | 792.333
2018-10-01 02:00:00 | Liverpool | 952.857

Другими словами, мне нужно получить среднечасовую (AVG) скорость движения поездов в городе.

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

Я знаю, что набор данных, упомянутый в вопросе, представляет собой часовые значения, если вы хотите вычислить среднее значение для разных временных отметок (например, «2018-10-01 02:45:08»), то вы можете усреднить скорости для каждого часа, как это-

select DATE_TRUNC('day', a.DATE_KEY)+cast(DATE_PART('hour',a.DATE_KEY) as Integer)/1*INTERVAL '1 hour' as hour_key, city, avg(speed) as avg_speed 
    FROM table1 a group by 1, 2;
0 голосов
/ 25 октября 2018

Я думаю, что все, что вам нужно, это использовать функцию AVG с предложением group by, например:

SELECT  DATE_KEY, CITY, AVG(SPEED) as AVG_SPEED
FROM table
GROUP BY DATE_KEY, CITY
...