SQL 数一数的个数

SQL counting the number of ones in sequence

我有以下 table,如您所见,ID 不一样。所以我不能做分组。我需要计算所有按顺序排列的。比如从 id 9 到 13,从 id 20 到 23。我该怎么做?

这是 LAGLEAD 的解决方案。

;WITH StackValues AS
(
    SELECT
        T.*,
        PreviousStatus = LAG(T.Status, 1, 0) OVER (ORDER BY T.ID ASC),
        NextStatus = LEAD(T.Status, 1, 0) OVER (ORDER BY T.ID ASC)
    FROM
        #YourTable AS T
),
ValuesToSum AS
(
    SELECT
        L.*,
        ValueToSum = CASE 
            WHEN L.Status = 1 AND L.PreviousStatus = 1 AND L.NextStatus = 0 THEN 1
            ELSE 0 END
    FROM
        StackValues AS L
)
SELECT
    Total = SUM(V.ValueToSum)
FROM
    ValuesToSum AS V

LAG 将为您提供 N 前一行(本示例为 N = 1),而 LEAD 将为您提供 N 下一行(N = 1 对于这个例子)。查询根据上一个和下一个值生成另一列 (ValueToSum),并使用它的结果求和。