Как вычислить среднечасовое значение в SQL? - PullRequest
0 голосов
/ 23 марта 2020

Я работаю с pyspark и хотел бы выполнить запрос spark.sql для вычисления среднечасового значения некоторых значений.

У меня есть таблица, подобная следующей

ID            timestamp                val
A        2020-01-19 03:03:00            5
A        2020-01-19 03:33:00            3
A        2020-01-19 03:55:00            7
A        2020-01-20 05:44:00            6 
A        2020-01-20 05:54:00            4 
B        2020-01-19 02:15:00            1
B        2020-01-19 02:22:00            0
B        2020-01-19 06:15:00            9
B        2020-01-19 06:44:00            2

Я бы хотел таблицу, подобную следующей

ID              time                  avgval
A        2020-01-19 03:00:00            5
A        2020-01-20 05:00:00            5
B        2020-01-19 02:00:00            1
B        2020-01-19 06:00:00            5.5 

Ответы [ 2 ]

0 голосов
/ 23 марта 2020

Я бы предложил вам использовать date_trunc():

select id, date_trunc('hour', time) as yyyymmddhh,
       avg(val)
from t
group by id, date_trunc('hour', time);
0 голосов
/ 23 марта 2020

Это может быть достигнуто простым запросом group by с функцией date_format.

spark.sql(
    """
       SELECT ID
            , date_format(timestamp, 'yyyy-MM-dd HH:00:00') as time
            , mean(val) as avgval
         FROM table 
        GROUP BY ID
               , date_format(timestamp, 'yyyy-MM-dd HH:00:00')
        ORDER BY ID
               , date_format(timestamp, 'yyyy-MM-dd HH:00:00')
    """) \
.show(20, False)

Результат:

+---+-------------------+------+
|ID |time               |avgval|
+---+-------------------+------+
|A  |2020-01-19 03:00:00|5.0   |
|A  |2020-01-20 05:00:00|5.0   |
|B  |2020-01-19 02:00:00|0.5   |
|B  |2020-01-19 06:00:00|5.5   |
+---+-------------------+------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...