我拥有的数据集有些棘手。这是一个滚动日历,为期24个月,数据每月仅发布一次。 相关数据点如下: •CaseNumber(int) •开始日期(日期) •Reporting_month(日期) •Months_old(int)
上面的“案例编号”具有一个“潜在”值,可在“ Reporting_month”中显示多达24次(0-23)。但是,每个“案例编号”在每个“ Reporting_month”中只会出现一次。 因此,如果您按时间顺序列出任何月份数(1月,2月,3月,4月等),只要“ CaseNumber”小于23,就会在每个“ Reporting_months”中显示一个“ CaseNumber” “ Months_old”。
但是,一旦“ CaseNumber” = 24“ Months_old”,它将不再在此数据集中报告。因此,在此报告周期中,最早的特定“ CaseNumber”将是23个“ Months_old”。任何较旧的版本,都不会出现在此报告中。
我有兴趣做的是跟踪这些“案例编号”,以查看是否有任何案例过早地从此报告中删除。因此,这样做时,我需要能够将当前的“ Reporting_month”与先前的“ Reporting_month”进行比较,以确定是否有任何“ CaseNumbers”过早地被丢弃。
Example:
Case # Previous Current
Months_old Months_old Status
1234 22 23 Correct age
5678 23 NULL Dropped due to age
9101 18 NULL Premature drop
仅表示我已经能够通过手动完成的excel中的VLOOKUP公式来实现此目的。我想摆脱必须手动完成的工作。
SELECT
a.[CaseNumber]
,CONVERT(DATE,MAX(a.[Month]),111) 'Month'
,CASE WHEN m2.[CaseNumber] IS NOT NULL
AND m1.[CaseNumber] IS NULL
THEN 'Yes'
ELSE 'No'
END as 'New Default'
FROM
[dbo].['v2-2yrTotalDefault$'] a
LEFT OUTER JOIN (
SELECT DISTINCT
[CaseNumber]
FROM
[dbo].['v2-2yrTotalDefault$']
WHERE
LEFT(CONVERT(varchar,[Month],112),6) = '201902') m1
ON m1.CaseNumber = a.CaseNumber --most current month
LEFT OUTER JOIN (
SELECT DISTINCT
[CaseNumber]
FROM
[dbo].['v2-2yrTotalDefault$']
WHERE
LEFT(CONVERT(varchar,[Month],112),6) = '201903') m2
ON m2.CaseNumber = a.CaseNumber --previous month
WHERE
a.[Month] > '12/01/2018'
GROUP BY
a.[CaseNumber]
ORDER BY
a.[CaseNumber]
/ 由于以下错误而导致不断出错: 消息8120,第16级,状态1,第8行 在选择列表中,列'm2.CaseNumber'无效,因为该列未包含在聚合函数或GROUP BY子句中。 消息8120,第16层,状态1,第9行 在选择列表中,列'm1.CaseNumber'无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中。 /
此外,我不想在SELECT语句中对月份进行硬编码。我希望能够控制我希望在WHERE子句中查看的月份。
最后,我希望结果返回到列,其中一个以月为单位反映前几个月的“年龄”,第二个以当前月为单位显示“年龄”。如果CaseNumber过早下降,我希望当月说出“ premature_expiration”。