首页 > 解决方案 > 复杂案例陈述-如果结束日期为空,则采取前一阶段

问题描述

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

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

我将在结束日期之前提取这些合同。在系统中最后一个阶段尚未关闭时,结束日期为空的情况。由于结束日期为空,因此未选择正确的阶段。如果当前阶段的结束日期为空,客户希望我们选择前一个阶段。在这种情况下,我如何让它选择上一个阶段。

标签: sqloraclecase-statement

解决方案


我想你只需要在这里汇总:

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值,因此将使用前一阶段的日期以防后一阶段丢失。顺便说一句,这假设所有阶段都将按时间顺序发生。


推荐阅读