Выбор суммы всех максимальных значений в час - PullRequest
0 голосов
/ 18 апреля 2020

У меня есть две таблицы (postgresql); одна таблица "ls_final", содержащая временной ряд точек данных для большого числа репортеров. Каждый репортер имеет свой идентификатор и отправляет примерно 6 отчетов в час:

id | timestamp | value
3234 | 2020-04-17 00:02:32 | 4.3421
3453 | 2020-04-17 00:02:25 | 2.7532
...

Репортеры имеют определенный тип, указанный в таблице "reporter_type"

id | reporter_type
3234 | 2
3453 | 13
...

Я хочу выбрать максимальное значение в час для каждого идентификатора репортера определенного reporter_type, а затем получить сумму этих максимальных значений и подсчитать, сколько репортеров внесли вклад в сумму. Т.е.

timestamp | sum_of_values | num_reporters
2020-04-17 02:00 | 7.024 | 5
2020-04-17 03:00 | 7.264 | 5
2020-04-17 04:00 | 7.711 | 5
...

Я долго искал решение этой проблемы, но безуспешно. Помощь очень ценится.

1 Ответ

0 голосов
/ 18 апреля 2020

Вы можете сделать это с двумя уровнями агрегации. Во-первых, в подзапросе вы можете объединить две таблицы, выполнить фильтрацию по типу целевого репортера и получить максимальное значение за час и за репортера; затем во внешнем запросе сгруппируйте по часам, суммируйте максимальные значения и посчитайте, сколько строк содержит каждая группа:

select
    timestamp_hour, 
    sum(max_value) sum_of_values,
    count(*) num_reporters
from (
    select lf.id, date_trunc('hour', lf.timestamp) timestamp_hour, max(lf.value) max_value
    from ls_final lf
    inner join reporter_type rt on rt.id = lf.id
    where rt.reporter_type = ?
    group by lf.id, date_trunc('hour', lf.timestamp)
) t
group by timestamp_hour
...