SQL按顺序计算个数

Posted

技术标签:

【中文标题】SQL按顺序计算个数【英文标题】:SQL counting the number of ones in sequence 【发布时间】:2018-03-26 06:55:29 【问题描述】:

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

【问题讨论】:

请阅读meta.***.com/questions/285551/… 和接受的答案 sql-server 2012 您尚未指定预期的输出。 您能否提及您的预期输出。您接受的解决方案似乎没有给出正确的结果。 【参考方案1】:

这是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),并将其结果用于求和。

【讨论】:

代码没有给出预期的输出,只给出一个数字。 好的,这正在计算桌子上所有的。但我需要总结一下,就像在 id 9 到 13 之间,我会把它算作一个。我需要总结所有的序列。

以上是关于SQL按顺序计算个数的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SQL 中按时间顺序计算事件?

SQL中多值匹配多值,并按匹配个数排序。

按时间顺序排列两行

任意输入十个数,按从小到大的顺序排列这十个数并输出

C语言编程问题:给数组中的元素按顺序编号

如何让 Map 中的值按放入顺序输出