簡體   English   中英

生成滿足條件的計數器

[英]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.

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