【问题标题】:How to count most consecutive occurrences of a value in a Column in SQL Server如何计算 SQL Server 列中值的最连续出现次数
【发布时间】:2014-01-31 04:35:58
【问题描述】:

我的数据库中有一个表Attendance

Date       | Present
------------------------
20/11/2013 |  Y
21/11/2013 |  Y
22/11/2013 |  N
23/11/2013 |  Y
24/11/2013 |  Y
25/11/2013 |  Y
26/11/2013 |  Y
27/11/2013 |  N
28/11/2013 |  Y

我想计算值YN 的最连续出现次数。

例如在上表中Y 出现2、4 和1 次。所以我想要 4 作为我的结果。 如何在 SQL Server 中实现这一点?

任何帮助将不胜感激。

【问题讨论】:

  • 您使用的是哪个版本的 SQL Server?
  • @astander- SQL Server 2008
  • 你想怎么做?在 StoredProc/UDF 或 TSQL 中。
  • @DarrenS- Stored Procedure 我们愿意。
  • 伪代码可能会有所帮助

标签: sql sql-server count


【解决方案1】:

试试这个:-

连续日期之间的差异将保持不变

   Select max(Sequence)
  from 
  (
   select present ,count(*) as Sequence,
         min(date) as MinDt, max(date) as MaxDt
         from (
                select t.Present,t.Date,
                    dateadd(day,
                              -(row_number() over (partition by present order by date))
                               ,date 
                          ) as grp
              from Table1 t
            ) t
  group by present, grp
  )a
   where Present ='Y'

SQL FIDDLE

【讨论】:

    【解决方案2】:

    您可以使用递归 CTE 来做到这一点:

    ;WITH cte AS (SELECT Date,Present,ROW_NUMBER() OVER(ORDER BY Date) RN
                  FROM Table1)
         ,cte2 AS (SELECT Date,Present,RN,ct = 1 
                   FROM cte
                   WHERE RN = 1
                   UNION ALL
                   SELECT a.Date,a.Present,a.RN,ct = CASE WHEN a.Present = b.Present THEN ct + 1 ELSE 1 END
                   FROM cte a
                   JOIN cte2 b
                     ON a.RN = b.RN+1)
    SELECT TOP 1 *
    FROM cte2
    ORDER BY CT DESC
    

    演示:SQL Fiddle

    请注意,由于您在问题中发布日期的格式,演示中的日期已更改。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多