我处理的大工作是在一年内(12个月)内,在入学后的整整一个月内找到最大期限,如果我们有两期的话,我做得不错。只是在测试我是否有3+周期的时候被困在了最后。下面的数据和图片希望将提供所有的信息和容易开始。多亏了所有人。这是我在过程结束时得到的最后一张工作表,谢谢大家。下面的代码会产生部分正确的结果。我的全局任务为每个成员找到了最大时间段,所以有些字段只是为了方便地工作。
/*
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创建表#tr ( Cust varchar(10),ENR_START date,enr_END date,rn INT);-从#t中选择*插入#tr值('123456‘,'2018-12-01',’2019-3‘’,1),('123456‘,'2019-3-28','2019-6-30’,2),-6个月,2个周期,岛屿('123456‘,'2019-7-26',’2019-8‘-20’,3),(“123456”,'2019-8-15','2019-12-31‘,4),('777’,'2018-11-4','2019-3-3‘,1)从#tr 中选择*
截图在这里:

发布于 2019-11-08 03:38:44
在我看来你想要这个。不太确定查询中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, mmStarthttps://stackoverflow.com/questions/58759865
复制相似问题