我有一张表EMPDATA,其中包含以下数据:
EntityId MeetDate SourceCode Status
1 06.11.2017 AB FNL
1 05.2.2018 AB NO
1 09.3.2018 AB FNL
3 07.12.2016 AB FNL
3 09.2.2015 AB FNL
3 07.8.2014 IU FNL
3 08.7.2017 IU FNL
条件:
1)MeetDate
列将在输出
1a)LastDate
:这将是Meetdate
的最新SourceCode
'AB'和状态'FNL'。
1b)InterimDate
:这是Meetdate
'IU'的最新SourceCode
,发生在Meetdate
'AB'的最新SourceCode
之后和Status
'FNL'。
对于没有IU源代码的记录,interimdate将为null。
即:输出如下:
EntityId LastDate InterimDate
1 09.3.2018 NULL
3 07.12.2016 08.7.2017
答案 0 :(得分:2)
@Anita,我没有回答你的最新问题" 查找不同条件的最长日期[重复] "由于设置为重复的问题。您可以尝试以下查询
parameters.setPreviewSize(w, h);
答案 1 :(得分:1)
您可以使用条件聚合轻松实现预期输出:
SELECT EntityId,
MAX(CASE
WHEN SourceCode = 'AB' AND status = 'FNL' THEN MeetDate
END) AS LastDate,
MAX(CASE WHEN SourceCode = 'IU' THEN MeetDate END) AS InterimDate
FROM mytable
GROUP BY EntityId
此查询实现OP中描述的所有逻辑,除了:
InterimDate
...在Meetdate
'AB'和状态'FNL'的最新SourceCode
之后发生。您可以使用CTE
实现此目的,以便代码看起来更干净:
;WITH CTE AS (
SELECT EntityId,
MAX(CASE
WHEN SourceCode = 'AB' AND status = 'FNL' THEN MeetDate
END) AS LastDate,
MAX(CASE WHEN SourceCode = 'IU' THEN MeetDate END) AS InterimDate
FROM mytable
GROUP BY EntityId
)
SELECT LastDate,
CASE
WHEN InterimDate > LastDate THEN InterimDate
END AS InterimDate
FROM CTE