Избегайте пробелов в соединении с созданными сериями в запросе posgre sql - PullRequest
0 голосов
/ 19 марта 2020

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

enter image description here

У меня есть таблица с множеством записей и двумя столбцами (которые актуальны здесь ). Импульс представляет собой 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...