【发布时间】:2014-04-18 09:39:14
【问题描述】:
我确信一定有一个简洁的解决方案,但我似乎无法以我需要的方式工作。我相信你应该能够使用递归 CTE 来实现这一点。我试图避免创建大量的 Tmp 表。
主表(或递归 Anchor?)按 Person 、 Month 和 Year 聚合数据,并对结果应用计数和排名
SELECT
PersonID
, Mth
, Yr
, COUNT(*) as DLY_Cnt
, RANK () OVER (PARTITION BY PersonID, Mth ORDER BY Yr DESC) as YrRnk
FROM #BkgSummary
GROUP BY PersonID, Mth, Yr
示例结果
PersonID Mth Yr DLY_Cnt Dep_YrRnk
6000995 6 2010 2 1
6000995 6 2009 1 2
6000995 6 2007 1 3
6000995 8 2011 2 1
我需要进一步汇总结果(并将其添加到上一个结果集中),以便基本上计算前几年在 PersonID 和 Mth 上同月进行的预订(加上它自己的值)
类似:SUM(DLY_Cnt) as DPY_Cnt by PersonID & Mth WHERE YrRnk >= Anchor YrRnk
我追求的示例结果:
PersonID Mth Yr DLY_Cnt Dep_YrRnk DPY_Cnt
6000995 6 2010 2 1 4
6000995 6 2009 1 2 2
6000995 6 2007 1 3 1
6000995 8 2011 2 1 2
【问题讨论】:
-
请发布您需要从中提取此信息的表的示例。
标签: sql sql-server tsql recursion common-table-expression