识别过期时间

时间:2019-06-12 19:35:11

标签: sql

我拥有的数据集有些棘手。这是一个滚动日历,为期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”。

0 个答案:

没有答案
相关问题