簡體   English   中英

按順序設置分組值

[英]Set value for group by order

我有 SQL 表,其中包含 COL_1、COL_2 列:

COL_1 COL_2 COL_3
一種 2021-09-11 14:25:15.699 1個
b 2021-09-11 14:25:36.489 2個
一種 2021-09-11 14:33:36.500 3個
一種 2021-09-11 14:36:24.915 3個
一種 2021-09-11 14:36:38.900 3個
一種 2021-09-11 14:36:54.905 3個
c 2021-09-11 14:37:09.092 4個
一種 2021-09-11 14:39:09.111 5個
d 2021-09-11 14:39:30.292 6個

我需要得到 COL_3。 我通過對第 1 列進行分組並按日期(第 2 列)排序得到第 4 列,如果組發生變化,我會為以下組分配一個新索引。

這是一個經典的缺口和孤島問題。

有很多解決方案。 一個常見的方法是使用LAG來識別更改值的行,然后使用條件窗口化的COUNT來分配組號

WITH PrevValues AS (
    SELECT *,
      LAG(COL_1) OVER (ORDER BY COL_2) AS PrevCol1
    FROM YourTable t
)
SELECT COL_1,COL_2,COL_3,
  COUNT(CASE WHEN PrevCol1 = COL_1 THEN NULL ELSE 1 END)
      OVER (ORDER BY COL_2 ROWS UNBOUNDED PRECEDING) AS New_Col_3
FROM PrevValues t

數據庫<>小提琴

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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