簡體   English   中英

SQL 查詢根據幾個條件查找持續時間

[英]SQL query to find duration based on several criteria

我有一個名為status的表,其中包含以下數據:

time       var  value
12:00:01    a   10
12:00:01    b   10
12:00:01    c   12
12:00:05    a   9
12:00:05    b   10
12:00:05    c   10
12:00:10    a   13
12:00:10    b   1
12:00:10    c   4
14:00:01    a   12
14:00:01    b   11
14:00:01    c   9
14:00:41    a   9
14:00:41    b   9
14:00:41    c   3

現在我想找到A > 10B > 10我想要答案的持續時間:44 秒(持續時間從 12:00:01 到 12:00:05 = 4 秒,持續時間從 14:00:01 到14:00:41 = 40 秒,總共 44 秒)我試過:

SELECT sum(time) as duration FROM status WHERE A>10 AND B>10;

這是一個間隙和孤島問題,可以使用累積和來解決。 lag()用於確定島嶼的開始位置。 累積總和定義組。

眾所周知,SQL 日期/時間函數依賴於數據庫。 所以下面給出了正確的想法,但它可能無法直接在您的數據庫中工作。 因此,條件發生的時間由以下查詢返回:

select min(time), max(time)
from (select t.*,
             sum(case when a < 10 or b < 10 then 1 else 0 end) over (order by time) as grp
      from status t
     ) t
where a > 10 and b > 10;

sum()然后是對此的聚合。 例如:

select sum(maxtime - mintime)
from (select max(time) as maxtime, min(time) as mintime
      from (select t.*,
                   sum(case when a < 10 or b < 10 then 1 else 0 end) over (order by time) as grp
            from status t
           ) t
      where a > 10 and b > 10
     ) t

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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