复杂的案例陈述-如果结束日期为null,则进入上一个阶段

问题描述 投票:0回答:1

如果结束日期为空,则进入上一个阶段

Contract_no     Contract_phase      end_date 
100     Draft           01/01/2020
100     Review          01/02/2020
100     Executed        01/03/2020
100     Completed

200     draft           01/01/2020
200     Review          01/02/2020
200     Executed

300     draft           01/01/2020
300     Review          01/02/2020
300     Executed        01/03/2020
300     Completed       01/04/2020

select Contract_no,Contract_phase
where completion date between 01/01/2020 and 01/04/2020

我要在截止日期之前拉这些合同。在某些情况下,当系统尚未关闭最后一个阶段时,结束日期为null。未选择正确的相位,因为空结束日期的日期。客户希望我们选择上一个阶段,如果当前阶段的结束日期为空。在这种情况下,我如何使其选择上一个阶段。

sql oracle case-statement
1个回答
0
投票

我认为您只需要在这里汇总:

SELECT
    Contract_no
FROM yourTable
GROUP BY
    Contract_no
HAVING
    MAX(end_date) BETWEEN date '2020-01-01' AND date '2020-04-01';

这应该起作用,因为默认情况下MAX只会忽略NULL值,因此将使用上一阶段的日期,以防后一个阶段的日期丢失。顺便说一下,这假设所有阶段都将按时间顺序发生。

© www.soinside.com 2019 - 2024. All rights reserved.