sql - 复杂案例陈述-如果结束日期为空,则采取前一阶段
问题描述
如果结束日期为空,则进入上一个阶段
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
我将在结束日期之前提取这些合同。在系统中最后一个阶段尚未关闭时,结束日期为空的情况。由于结束日期为空,因此未选择正确的阶段。如果当前阶段的结束日期为空,客户希望我们选择前一个阶段。在这种情况下,我如何让它选择上一个阶段。
解决方案
我想你只需要在这里汇总:
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
值,因此将使用前一阶段的日期以防后一阶段丢失。顺便说一句,这假设所有阶段都将按时间顺序发生。
推荐阅读
- php - 有没有办法在使用 PDO 提交事务之前读取插入的行?
- image-processing - ValueError:无法将输入数组从形状(128,128,1)广播到形状(128,128,3,1)
- json - 如何按负载对 jq 结果进行排序?
- python - 计算列表列表中的子列表数
- python - 从订单簿中获取蜡烛
- javascript - 使用 javascript 在模板中添加 django for 循环
- react-native - React Native onPress 函数不断被调用
- c# - 有没有办法在 C# 中生成对象名称而无需硬编码?
- google-cloud-platform - 具有云功能的 gcp 故障检测器
- elasticsearch - Elasticsearch Unassigned Shard:如何重新分配回来?