PostgreSQL 9.5
我的資料集如下所示:

我想將同一天的記錄分成 1 分鐘的間隔,但每個間隔的開頭作為間隔的最小值。
使用此資料集,我的理想輸出將如下所示:

比如 2014-05-27,最小值是 15:09:40,那么第一個一分鐘的時間間隔是15:09:40 - 15:10:40,有 3 條記錄。對于下一個區間 ,15:11:01 - 15:12:01有一條記錄。
希望我已經說清楚了。提前致謝。
uj5u.com熱心網友回復:
您可以嘗試使用 CTE 或子查詢來獲取 gap_seconds ,它表示從行的減法occurred_at和前occurred_at一行中減去的值,然后制作一個 grp 列來計算保持間隙的值。
;WITH CTE AS (
SELECT *,
FLOOR(SUM(gap_seconds) OVER(ORDER BY occurred_at) / 60) grp
FROM (
SELECT *,
EXTRACT(SECOND FROM occurred_at - LAG(occurred_at,1,occurred_at) OVER(ORDER BY occurred_at)) gap_seconds
FROM T
) t1
)
SELECT MIN(occurred_at) occurred_at,
COUNT(*)
FROM CTE
GROUP BY grp
ORDER BY 1
sqlfiddle
另一個例子,我們可以像下面的查詢那樣除以 120 秒
WITH CTE AS (
SELECT *,
FLOOR(SUM(gap_seconds) OVER(ORDER BY occurred_at) / 120) grp
FROM (
SELECT *,
EXTRACT(SECOND FROM occurred_at - LAG(occurred_at,1,occurred_at) OVER(ORDER BY occurred_at)) gap_seconds
FROM T
) t1
)
SELECT MIN(occurred_at) occurred_at,
COUNT(*)
FROM CTE
GROUP BY grp
ORDER BY 1
sqlfiddle
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/439768.html
標籤:sql PostgreSQL 时间戳
