Я измеряю количество дождя с помощью датчиков. У них есть счетчик, который увеличивается, когда идет дождь. Я отображаю эту сумму дождя на графике примерно так:
![enter image description here](https://i.stack.imgur.com/QrIW8.png)
У меня есть таблица с множеством записей и двумя столбцами (которые актуальны здесь ). Импульс представляет собой jsonb цифру c в полезной нагрузке, которая только увеличивается. inserted_a
t - это дата и время.
+--------------------+----------+---------------------------------------+
| inserted_at | payload | notes about the entry |
+--------------------+----------+---------------------------------------+
| before timeseries | 120 | the last entry more than 12 hours ago |
| t-10 | 120 | no rain, there is a gap before this |
| t-9 | 122 | 2mm rain |
| t-8 | 122 | |
| t-8 | 125 | two values, so the maximum is taken |
| t-7 | 126 | 1mm rain |
| ... | ... | ... |
| last entry | 135 | |
+--------------------+----------+---------------------------------------+
Желаемый результат будет [120, 120, 120, 120, 122, 125, 126, ..., 135]
Мой текущий запрос posgre sql делает это так:
SELECT max(t.payload) as pulse
FROM generate_series(date_trunc('hour', now())- interval '13 hours', date_trunc('hour', now()), interval '60 min') as g(series)
LEFT JOIN ttnmessages t
ON t.inserted_at < g.series + interval '60 min'
AND t.inserted_at > g.series
WHERE t.hardware_serial like '#{hardware_serial}'
GROUP BY g.series
ORDER BY g.series
Работает довольно хорошо, , но не обрабатывает пробелы в данных . Есть идеи, как я подхожу к этому? В идеале я хотел бы получить ровно 13 результатов с результатом по умолчанию, являющимся максимумом предыдущего периода. Таблица содержит несколько миллионов записей, поэтому важно время выполнения (но это не проблема для текущего запроса).
EDIT : я объяснил в первом абзаце, каково фактическое использование для этого is и удалил преобразование jsonb из запроса.
EDIT2 : При наличии пробелов в данных датчика график с текущим запросом будет выглядеть следующим образом ![enter image description here](https://i.stack.imgur.com/eVA8r.png)