簡體   English   中英

如何在 Postgres 中顯示開始/結束狀態?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM