我有下表
| 票號 | 操作員 | 日期戳 | 評論 |
|---|---|---|---|
| 1個 | p1 | 2022 年 7 月 20 日,晚上 10:30 | 從狀態 A 變為 B |
| 1個 | p1 | 2022 年 7 月 20 日,晚上 11:30 | 從狀態 B 變為 C |
| 1個 | p2 | 2022 年 7 月 21 日,晚上 10:01 | 從狀態 D 變為 B |
| 1個 | p3 | 2022 年 7 月 21 日,晚上 11:41 | 從狀態 B 變為 A |
| 2個 | p1 | 2022 年 11 月 13 日,晚上 11:01 | 從狀態 C 變為 B |
| 3個 | p5 | 2022 年 11 月 13 日上午 09:10 | 從狀態 A 變為 B |
| 3個 | p1 | 2022 年 11 月 13 日上午 11:10 | 從狀態 B 變為 C |
| 3個 | p1 | 2022 年 11 月 13 日,晚上 11:41 | 從狀態 C 變為 B |
我需要找出票證(由 TicketID 標識)在 B 州花費的時間為了進一步參考上表,票證 1 從 2022 年 7 月 20 日晚上 10:30 到晚上 11:30(1 小時)和 7 月 21 日花費, 2022, 晚上 10:01 到晚上 11:41(1 小時 40 分鐘)在狀態 B 總共(2 小時 40 分鐘)。
類似地,工單 2 只有一個狀態更改為 B,并且沒有從 B 進行狀態更改的條目,因此我們假設它仍處于狀態 B,并且持續時間變為 CurrentTime-2022 年 11 月 13 日,晚上 11:01。
我很難弄清楚如何在 TSQL 視圖中實作這一點。非常感謝任何幫助。假設當前時間是 2022 年 11 月 13 日晚上 11:51 最終視圖輸出應該如下所示
| 票號 | 時長(分鐘) |
|---|---|
| 1個 | 160 |
| 2個 | 50 |
| 3個 | 130 |
uj5u.com熱心網友回復:
好的,有了新的更改資料,就可以這樣做了。
首先確定什么是to和FROM然后,得到LEADdateime
最后以分鐘為單位總結差異
您仍然應該始終提供日期yyyy-mm-dd hh:MM:ss
WITH CTE as (SELECT
[TicketID], [Operator], [Datestamp],
CASE WHEN [Remarks] LIKE '%to B%' THen 1
WHEN [Remarks] LIKE '%B to%' THen 2
ELSE 0 END flg
FROM tab1
),
CTE2 AS (SELECT
[TicketID],flg,[Datestamp], LEAD([Datestamp]) OVER(PARTITION BY [TicketID] ORDER BY [Datestamp] ) date2
FROM CTE)
SELECT
[TicketID],SUM(ABS(datediff(minute,[Datestamp],COALESCE(date2, getdate())))) as duration
FROM CTE2
WHERE flg = 1
GROUP BY [TicketID]
| 票號 | 期間 |
|---|---|
| 1個 | 160 |
| 2個 | 450 |
| 3個 | 610 |
小提琴
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/535479.html
標籤:数据库sql服务器数据库表sql-server-2016
上一篇:查詢過去n天的分組依據
