簡體   English   中英

如何計算 SQL 中連續時間戳的差異?

[英]How to count difference in consecutive timestamps in SQL?

所以我有一些看起來像這樣的數據:

   USER_ID      text_field                   TIMESTAMP 
1  0000001          dragon     2021-06-04 21:23:30.612      
2  0000001          dragon     2021-06-04 21:23:55.411
3  0000001          dragon     2021-06-04 21:27:35.418
4  0000002         pitbull     2021-06-04 19:17:53.211
5  0000002          dragon     2021-06-04 19:47:53.211
6  0000002          dragon     2021-06-04 19:57:53.211
7  0000003          dragon     2021-06-05 10:00:53.211
8  0000003          dragon     2021-06-05 10:02:53.211
9  0000003           earth     2021-06-05 10:04:53.211
10 0000003          dragon     2021-06-05 10:06:53.211
11 0000003          dragon     2021-06-05 10:08:53.211

我希望看到的是帶有單詞dragon的結果條目的第一個時間戳和最后一個時間戳之間的差異

所以在 ID 0000001 中,我們的所有條目都是dragon ,所以在這種情況下,我想要第 3 行減去第 1 行。這是所有以龍和 ID = 0000001 為特征的條目的最大值(時間戳)-最小值(時間戳)。

對於 ID 2,請注意並非全部都是龍,但我希望只有dragon條目具有相同的差異。

一個 ID 也有可能具有非結果性的dragon條目,例如 ID 0000003。這里我需要兩個塊中的結果性條目有所不同。 這意味着對於 ID 0000003,我需要row 8 - row 7row 11 - row 10

最終 output:

USER_ID  time_diff
0000001       (2021-06-04 21:27:35.418  - 2021-06-04 21:23:30.612)
0000002       (2021-06-04 19:57:53.211  - 2021-06-04 19:47:53.211)
0000003       (2021-06-05 10:02:53.211  - 2021-06-05 10:00:53.211)
0000003       (2021-06-05 10:08:53.211  - 2021-06-05 10:06:53.211)

很明顯,這些只是 time_diff 的方程式,我真的想要這個專欄中的差異。

這是你可以做到的:

select user_id , min(TIMESTAMP) , max(TIMESTAMP), datediff(second,max(TIMESTAMP),min(TIMESTAMP)) time_diff
from (
  select *
   , rank() over (partition by user_id order by TIMESTAMP)
    -rank() over (partition by user_id,text_field order by TIMESTAMP) rn
  from users
) t
where text_field = 'dragon'
group by user_id , rn 
order by user_id 

如果您只特別關心“龍”,則可以使用每行的非龍的累積總和來識別每個組。 然后聚合:

select userid, min(timestamp), max(timestamp)
from (select t.*,
             sum(case when text_field <> 'dragon' then 1 else 0 end) over (partition by user_id order by timestamp) as grp
      from t
     ) t
where text_field = 'dragon'
group by userid, grp;

您可以根據自己的喜好計算差異。

暫無
暫無

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

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