T10=]:处理连续周期并按组计数

T-SQL: process consequtive periods and count by group

我处理了一项艰巨的工作,通过一年内注册的完整月份(12 个月)找到最大期限,如果我们有 2 个期限,我做得很好。在测试我是否有 3 个以上的经期时,最后卡住了。下面的数据和图片希望将提供所有信息并轻松启动。谢谢大家。这是最后的工作 table 我在我的过程结束时得到了,谢谢大家。下面的代码产生 部分 正确的结果。我的全局任务为每个成员找到 MAX period,所以有些字段只是为了方便工作。

/*  
DROP TABLE IF EXISTS #t;
CREATE TABLE #t ( Cust VARCHAR(10), mm INT, mm_prev INT, rn INT)
     INSERT #t values
         (123456, 1, NULL, 1), (123456, 2, 1, 2), 
         (123456, 4, 2, 3),   (123456, 5, 4, 4),  (123456, 6, 5, 5),
         (123456, 8, 6, 6),   (123456, 9, 8, 7),  (123456, 10, 9, 8), (123456, 11, 10, 9), (123456, 12, 11, 10),  
         (777 , 1, NULL, 1),(777 , 2, 1, 2) 

        SELECT   * from #t
        */


    select 
       Cust, MIN(mm) mmStart, MAX(mm) mmEnd, 
       CASE WHEN mm = rn THEN 'Grp A' ELSE 'Grp B' END Grp 
      ,COUNT(*) mm_count
    FROM #t
    WHERE 1=1 
      --mm - ISNULL(mm_prev,0) = 1     --check for conseq but we drop mm=6--> start of new period
      --   AND mm = rn        -- this brings only first group by mm
    GROUP BY Cust, CASE WHEN mm = rn THEN 'Grp A' ELSE 'Grp B' END
    ORDER BY 1,4

截图在这里:

在我看来,你想要这个。不太确定查询中 case 语句的目的是什么

with cte as
(
    SELECT  *,
            grp = mm - rn
    from    #t
)
SELECT  Cust, MIN(mm) as mmStart, MAX(mm) as mmEnd, grp,
        count(*) as mm_count
FROM    cte
GROUP BY Cust, grp
order by Cust, mmStart