Postgres 9.3 подсчитывают строки, соответствующие столбцу относительно временной отметки строки - PullRequest
0 голосов
/ 20 июня 2019

Я использовал функции WINDOW и раньше, но только при работе с данными, которые имеют фиксированную каденцию / интервал. Вероятно, мне не хватает чего-то простого в агрегации, но у меня никогда не было сценария, в котором я не работаю с фиксированными интервалами.

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

id (int) 
happened_at (timestamp)
sensor_id (int)
new_value (float)

Я пытаюсь создать запрос, который будет включать в себя счетчик всех выборок до случившегося_от заданной строки результатов. Итак, учитывая очень простой набор данных из двух строк:

id|happened_at     |sensor_id| new_value
1 |2019-06-07:21:41|134679   | 123.331
2 |2019-06-07:19:00|134679   | 100.009

Я бы хотел, чтобы набор результатов выглядел так:

happened_at     |sensor_id | new_value | sample_count
2019-06-07:21:41|134679    |123.331    |2
2019-06-07:19:00|134679    |123.331    |1

Я пробовал:

SELECT *,
       (SELECT count(sample_history.id) OVER (PARTITION BY score_history.sensor_id 
        ORDER BY sample_history.happened_at DESC))
FROM sensor_history
ORDER by happened_at DESC

и дух не пойдет на работу.

(SELECT count(*) 
FROM sample_history
WHERE sample_history.happened_at <= sample_timestamp)

Высоко ценится понимание.

1 Ответ

1 голос
/ 20 июня 2019

Избавьтесь от SELECT (подзапроса) при использовании оконной функции.

SELECT *,
       count(*) OVER (PARTITION BY sensor_id ORDER BY happened_at DESC)
FROM sensor_history
ORDER BY happened_at DESC
...