gpt4 book ai didi

sql - 从下一行开始根据当前值对行进行分组

转载 作者:行者123 更新时间:2023-12-02 23:33:33 25 4
gpt4 key购买 nike

我需要使用 value <> z 增加所有下一行的组号。 z意味着接下来的所有行都根据b将具有相同的组号。

CREATE TABLE #tmp
(
a CHAR(1)
, b INT
);

INSERT INTO #tmp (a
, b)
VALUES ('a', 1)
, ('b', 2)
, ('z', 3)
, ('c', 4)
, ('z', 5)
, ('z', 6)
, ('d', 7);

SELECT t.a
, t.b
, SUM(v.is_z) OVER (ORDER BY t.b ROWS UNBOUNDED PRECEDING) - ROW_NUMBER() OVER (ORDER BY t.b) group_nbr
FROM #tmp AS t
CROSS APPLY (SELECT CASE WHEN a = 'z' THEN 2 ELSE 1 END AS is_z) AS v
ORDER BY 2;

DROP TABLE #tmp;

在我的查询中,该组从值为 z 的行开始递增。 ,但我需要开始为下一行增加它。

预期输出:

enter image description here

最佳答案

解决方案是每次找到 z 时加 1,然后 LAG结果最后增加 1 行。

;WITH CumulativeZ AS
(
SELECT
T.*,
CumulativeZ = SUM(CASE WHEN T.a = 'z' THEN 1 ELSE 0 END) OVER(ORDER BY T.b ASC)
FROM
#tmp AS T
)
SELECT
C.a,
C.b,
C.CumulativeZ,
[Group] = LAG(C.CumulativeZ, 1, 0) OVER (ORDER BY C.b ASC)
FROM
CumulativeZ AS C

结果:

a   b   CumulativeZ Group
a 1 0 0
b 2 0 0
z 3 1 0
c 4 1 1
z 5 2 1
z 6 3 2
d 7 3 3

请注意,LAG 函数适用于 SQL Server 2012+。您可以在 2008+ 版本上使用 ROW_NUMBER 来模仿它的功能。

关于sql - 从下一行开始根据当前值对行进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54362520/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com