【发布时间】:2020-09-28 23:59:49
【问题描述】:
首先,我使用的是 SSMS 2018。我正在尝试创建一个公用表表达式,以便稍后在某些代码中使用。我需要在每人每个适用的季度减少一行,我尝试使用 Haves/Group Bys 和 wheres,但我无法获得正确的结果集。我目前拥有的是这样的表格:
Total Cookies(DurableKey(Int), QuarterEndDateOfStartQuarter(Date), QuarterEndDate(Date), totalCookies (Int), NumberofDays(Int))
持久键代表一个人加班。
QuarterEndDateOfStartQuarter 代表某些要求的第一个适用季度,即在该季度的一天内至少吃了 10 个 cookie
QuarterEndDate 代表当前季度,在 QuarterEndDateOfStartQuarter 之后最多 3 个季度
TotalCookies 表示自开始季度开始以来已吃掉的饼干
NumberofDays 表示自开始季度开始以来食用 cookie 的天数。
数据看起来像这样:
DurableKey QuarterEndDateOfStartQuarter QuarterEndDate totalCookies NumberofDays
99999 2018-06-30 2018-06-30 1410.000 17
99999 2018-06-30 2018-09-30 6564.000 91
99999 2018-06-30 2018-12-31 8174.000 154
99999 2018-06-30 2019-03-31 9554.000 161
99999 2018-09-30 2018-09-30 5154.000 74
99999 2018-09-30 2018-12-31 6764.000 137
99999 2018-09-30 2019-03-31 8144.000 144
99999 2018-09-30 2019-06-30 10091.000 188
99999 2019-03-31 2019-03-31 1380.000 7
99999 2019-03-31 2019-06-30 3327.000 51
99999 2019-03-31 2019-09-30 3357.000 52
99999 2019-03-31 2019-12-31 3357.000 52
99999 2019-06-30 2019-06-30 1695.000 30
99999 2019-06-30 2019-09-30 1725.000 31
99999 2019-06-30 2019-12-31 1725.000 31
99999 2019-06-30 2020-03-31 2917.500 74
我想最终得到一个 CTE,它具有人 - 季度粒度而不是人 - 开始季度 - 季度。所以表格会有列:
Cookies(DurableKey(Int), QuarterEndDate(Date), totalCookies (Int), NumberofDays(Int))
如果有重叠的行,数据将从之前的 QuarterEndDateOfStartQuarter 对应的行中提取:
DurableKey QuarterEndDate totalCookies NumberofDays
99999 2018-06-30 1410.000 17
99999 2018-09-30 6564.000 91
99999 2018-12-31 8174.000 154
99999 2019-03-31 9554.000 161
99999 2019-06-30 10091.000 188
99999 2019-09-30 3357.000 52
99999 2019-12-31 3357.000 52
99999 2020-03-31 2917.500 74
我觉得这应该很简单,但一直没能完成。
【问题讨论】:
标签: sql sql-server