我尝试了这个SQL CASE来获取剩余的天数超过KPI(OKPI)。
有两个主要的情况让我很困惑,
1-删除或不考虑星期天作为一个工作日。
2-实际bkg_date在1天之后。例如,如果bkg_date = '08 Jul 2023',则bkg_date将= '10 Jul 2023'
CASE
WHEN SYSDATE - (x.bkg_date + 1) <= x.dlvry_kpi THEN
CASE
WHEN x.dlvry_kpi - (
-- Full weeks from Monday of start week to Monday of current week
(TRUNC(SYSDATE, 'IW') - TRUNC(x.bkg_date + 1, 'IW')) * 6 / 7
-- Add extra days in the current week excluding Sunday
+ CASE WHEN TRUNC(SYSDATE) - TRUNC(SYSDATE, 'IW') + 1 <= 6 THEN TRUNC(SYSDATE) - TRUNC(SYSDATE, 'IW') + 1 ELSE 6 END
-- Subtract days in the week before the start date excluding Sunday
- CASE WHEN TRUNC(x.bkg_date + 1) - TRUNC(x.bkg_date + 1, 'IW') <= 6 THEN TRUNC(x.bkg_date + 1) - TRUNC(x.bkg_date + 1, 'IW') ELSE 6 END
) <= 0 THEN '00 days left'
ELSE
TO_CHAR(
x.dlvry_kpi - (
-- Full weeks from Monday of start week to Monday of current week
(TRUNC(SYSDATE, 'IW') - TRUNC(x.bkg_date + 1, 'IW')) * 6 / 7
-- Add extra days in the current week excluding Sunday
+ CASE WHEN TRUNC(SYSDATE) - TRUNC(SYSDATE, 'IW') + 1 <= 6 THEN TRUNC(SYSDATE) - TRUNC(SYSDATE, 'IW') + 1 ELSE 6 END
-- Subtract days in the week before the start date excluding Sunday
- CASE WHEN TRUNC(x.bkg_date + 1) - TRUNC(x.bkg_date + 1, 'IW') <= 6 THEN TRUNC(x.bkg_date + 1) - TRUNC(x.bkg_date + 1, 'IW') ELSE 6 END
)
) || ' days left'
END
ELSE 'OKPI'
END AS AGING
字符串
所以,这就是我提出的,并给出了以下输入的结果OKPI;
x.bkg_date =“2023年7月8日”
sysdate = '2023年7月17日'
x.dlvry_kpi = 7
1条答案
按热度按时间ltqd579y1#
您可以使用以下命令查找下一个工作日(跳过星期日):
字符串
对于示例数据:
型
然后:
型
输出:
| 下一个_BKG_日期|DLVRY_KPI|今天|完整_周|结束时天数|开始日期|天数| DAYS |
| --|--|--|--|--|--|--| ------------ |
| 2023-07-25 00:00:00(星期二)|一个|2023-07-17 00:00:00(星期一)|六个|一个|0个|七个| 7 |
| 2023-07-24 00:00:00(星期一)|一个|2023-07-17 00:00:00(星期一)|六个|0个|0个|六个| 6 |
| 2023-07-24 00:00:00(星期一)|一个|2023-07-17 00:00:00(星期一)|六个|0个|0个|六个| 6 |
| 2023-07-22 00:00:00(星期六)|一个|2023-07-17 00:00:00(星期一)|0个|五个|0个|五个| 5 |
| 2023-07-21 00:00:00(FRI)|一个|2023-07-17 00:00:00(星期一)|0个|四个|0个|四个| 4 |
| 2023-07-20 00:00:00(星期四)|一个|2023-07-17 00:00:00(星期一)|0个|三个|0个|三个| 3 |
| 2023-07-19 00:00:00(星期三)|一个|2023-07-17 00:00:00(星期一)|0个|二个|0个|二个| 2 |
| 2023-07-18 00:00:00(星期二)|一个|2023-07-17 00:00:00(星期一)|0个|一个|0个|一个| 1 |
| 2023-07-17 00:00:00(星期一)|一个|2023-07-17 00:00:00(星期一)|0个|0个|0个|0个| 0 |
| 2023-07-17 00:00:00(星期一)|一个|2023-07-17 00:00:00(星期一)|0个|0个|0个|0个| 0 |
| 2023-07-15 00:00:00(星期六)|一个|2023-07-17 00:00:00(星期一)|-6|五个|0个|-1| -1 |
| 2023-07-14 00:00:00(FRI)|一个|2023-07-17 00:00:00(星期一)|-6|四个|0个|-2| -2 |
| 2023-07-13 00:00:00(星期四)|一个|2023-07-17 00:00:00(星期一)|-6|三个|0个|-3| -3 |
| 2023-07-12 00:00:00(星期三)|一个|2023-07-17 00:00:00(星期一)|-6|二个|0个|-4| -4 |
| 2023-07-11 00:00:00(星期二)|一个|2023-07-17 00:00:00(星期一)|-6|一个|0个|-5| -5 |
然后得到剩下的天数:
型
哪些输出:
| DLVRY_KPI|天数|老化| AGING |
| --|--|--| ------------ |
| 一个|七个|8天left| 8 days left |
| 一个|六个|7天left| 7 days left |
| 一个|六个|7天left| 7 days left |
| 一个|五个|6天left| 6 days left |
| 一个|四个|5天left| 5 days left |
| 一个|三个|4天left| 4 days left |
| 一个|二个|3天left| 3 days left |
| 一个|一个|2天left| 2 days left |
| 一个|0个|1天left| 1 days left |
| 一个|0个|1天left| 1 days left |
| 一个|-1| 0天left| 0 days left |
| 一个|-2| OKPI| OKPI |
| 一个|-3| OKPI| OKPI |
| 一个|-4| OKPI| OKPI |
| 一个|-5| OKPI| OKPI |
fiddle