[英]Generate a counter with a condition is met
我想生成一個有條件的計數器。 通過id
我想生成一個計數器,從1,每當一列開始changer
的變化從x到y或對x加1,創建的計數器。
id changer
1 x
1 x
1 y
1 x
1 y
2 y
2 x
2 y
3 x
3 y
3 x
3 y
3 y
預期結果是:
id changer counter
1 x 1
1 x 1
1 y 2
1 x 3
1 y 4
2 y 1
2 x 2
2 y 3
3 x 1
3 y 2
3 x 3
3 y 4
3 y 4
有趣的是,如果您只需要最大值,這將使事情變得簡單得多,因為您只需要為發生更改的行創建一個計數器,然后獲取最大值:
WITH tCountAtChange as
(SELECT *, ROW_NUMBER() OVER (PARTITION BY id ORDER BY date_time) + 1 as aCounter
FROM
(SELECT UniqueNbr, date_time, id
,CASE WHEN LAG(changer) OVER (PARTITION BY id ORDER BY date_time) <> changer THEN 'YES' ELSE 'NO' END as ChangeFlag
FROM MyTable) a
WHERE ChangeFlag = 'YES')
SELECT MyTable.id, COALESCE(MAX(aCounter), 1) as MaxCounter
FROM MyTable
LEFT JOIN tCountAtChange
ON MyTable.UniqueNbr = tCountAtChange.UniqueNbr
GROUP BY MyTable.id
結果:
id MaxCounter
1 4
2 3
3 4
您將需要一個ORDER BY子句的date_time字段或某種排序字段,以及一個可用於聯接的UniqueNbr(唯一ID),或者您始終可以使用ROW_NUMBER函數在另一個cte中創建一個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.