[英]How do I display start / end states in Postgres?
我有一個包含日期和狀態字段的表格。 我想匯總數據以顯示開始和停止時間,以便制作水平時間段圖表。 圖片示例: https : //imgur.com/a/27ZmvJ8 。
我想要一個“時間限額”,上面寫着“如果時間大於 X 分鍾,請將其視為一個新的時間段。這是原始數據:
DateTime | Status |
12:01 Online
12:02 Online
12:04 (Notice Skip) Online
12:07 Online
12:08 Offline
12:09 Offline
12:10 Offline
12:11 Offline
12:12 Offline
1:45 (Big Skip) Offline
1:46 Offline
1:47 Offline
1:48 Offline
最終結果應該是這樣的。 請注意 2 分鍾而不是 1 分鍾的小跳躍和大於 1 小時的大跳躍的區別,這會導致新的時間段與否。
Start | End | Status
12:01 12:08 Online
12:08 12:12 Offline
1:45 1:48 Offline
select status, min(dt) s, max(dt) e
from(
select *, sum(dtDif) over (partition by status order by dt ROWS UNBOUNDED PRECEDING) grp
from(
select *, case when EXTRACT(Minute FROM dt-prevdt) < 5 /*set your own value*/ then 0 else 1 end dtDif from(
select *, lag (dt,1, dt) over (order by dt) prevdt
from cte
)q
)q1
)q2
group by status, grp
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.