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

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

【问题讨论】:

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

标签: sql sql-server tsql sql-server-2012 gaps-and-islands


【解决方案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 之间,我会把它算作一个。我需要总结所有的序列。
猜你喜欢
  • 1970-01-01
  • 2014-08-03
  • 2019-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多