不幸的是,我沒有太多使用 SQL Server 的經驗。
我有一個具有以下結構和示例資料的表:
| ID | 地位 | 時間戳 |
|---|---|---|
| 68 | 2 | 10.01.2022 08:45:02 |
| 52 | 0 | 10.01.2022 08:44:29 |
| 50 | 0 | 10.01.2022 08:41:12 |
| 46 | 0 | 10.01.2022 08:41:02 |
| 40 | 1 | 10.01.2022 08:40:07 |
| 38 | 2 | 10.01.2022 08:20:05 |
| 32 | 0 | 10.01.2022 08:19:29 |
| 30 | 1 | 10.01.2022 08:15:34 |
我現在要做的是將狀態 1 作為開始的時間戳,將狀態 2 的時間戳作為結束并計算其間為 0 的條目。不幸的是,條目不是連續的。所以我不能只向前或向后計算ID。結果應如下所示:
| 開始 | 結尾 | 計數狀態0 |
|---|---|---|
| 10.01.2022 08:40:07 | 10.01.2022 08:45:02 | 3 |
| 10.01.2022 08:15:34 | 10.01.2022 08:20:05 | 1 |
我將非常感謝有關如何最好地解決此問題的建議。我已經嘗試使用該group by功能解決它,但我還沒有成功。
uj5u.com熱心網友回復:
您已標記 SQL Server 2008 - 我相信以下是兼容的,當然無法測驗。
您可以使用橫向連接 ( cross apply ) 來查找適用于每一行的相應結束時間戳。
然后只需按結束時間戳聚合并計算狀態為零的行。
with e as (
select t.timestamp tstart, e.timestamp tend
from t
cross apply (
select Min(timestamp) timestamp
from t t2
where t2.status=2
and t2.timestamp > t.timestamp
)e
where status=0
)
select Min(tstart) [Start], Max(tend) [end], count(*) CountStatus0
from e
group by tend
order by [start] desc
參見示例小提琴
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/407723.html
標籤:
