Postgres 9.3计算相对于行的时间戳匹配列的行

时间:2019-06-20 16:34:17

标签: postgresql window-functions

我以前使用过WINDOW函数,但仅在处理具有固定节奏/间隔的数据时才使用。我可能会错过一些简单的聚合操作,但是我从来没有遇到过没有固定间隔的情况。

我有一张桌子,上面记录着任意时间戳的样本。仅当样品是前一个样品的差值并且由于大量条件而导致采样率完全不规则时才记录该样品。该表非常简单:

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

我正在尝试构造一个查询,该查询将包括给定结果行的巧合之前的所有样本的计数。因此,给出了一个非常简单的2行样本数据集:

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 个答案:

答案 0 :(得分:1)

使用窗口函数时,请摆脱SELECT(子查询)。

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