[英]T-SQL Grouping With Splits
我想分組連續的值。 我想將前3個Reg單元,一個ICU和最后3個Reg單元分組。 問題是第3組與第一組相同,我無法單獨對它們進行分組。 我試過窗口功能和其他東西無濟於事。 會欣賞任何想法。 謝謝。
數據集
ID OccpdID Unit
1 1 Reg
1 2 Reg
1 3 Reg
1 4 ICU
1 5 Reg
1 6 Reg
1 7 Reg
結果是:
ID OccpdID Unit Group
1 1 Reg 1
1 2 Reg 1
1 3 Reg 1
1 4 ICU 2
1 5 Reg 3
1 6 Reg 3
1 7 Reg 3
我不確定如何/如果你想讓ID考慮到它,但這樣的事情將提供所需的結果:
SELECT
ID
, OccpdID
, Unit
, SUM(CASE WHEN Unit <> L OR L IS NULL THEN 1 ELSE 0 END) OVER (ORDER BY OccpdID) [Group]
FROM
(
SELECT
ID
, OccpdID
, Unit
, LAG(Unit, 1, NULL) OVER (ORDER BY OccpdID) L
FROM YourTable
) Q
我會使用lag()
和累積總和:
select t.*,
sum(case when prev_unit = unit then 0 else 1 end) over (order by occpdid) as grp
from (select t.*, lag(t.unit) over (order by t.occpdid) as prev_unit
from t
) t;
您可以嘗試在帶有SUM
和CASE WHEN
窗口函數的子查詢中使用LAG
。
SELECT ID,OccpdID,Unit,SUM(CASE WHEN Unit <> prevVal THEN 1 ELSE 0 END) OVER(ORDER BY OccpdID) +1 as 'Group'
FROM (
SELECT *, LAG(Unit) OVER(ORDER BY OccpdID) prevVal
FROM Dataset
) t1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.