plsql - 从上一行获取价值
问题描述
我正在尝试从前一行获取值,然后将其添加到当前行中的值以用于报告目的。
报告的目的是查看当天下午 5 点前下单并在晚上 10 点前发货的订单总数,下午 5 点后下单的订单需要添加到第二天,还有任何不符合前一天的订单晚上 10 点之前的 5 点标准也被添加到第二天的总数中。
SELECT SUB1."DATE",
COUNT(SUB1."ORDER_ID") AS "TOTAL",
SUM(SUB1."SAME_DAY") AS "SAME_DAY",
(COUNT(SUB1."ORDER_ID") - SUM(SUB1.SAME_DAY)) AS "CARRIED_FORWARD",
SUM(SUB1."AFTER_5"),
SUM(SUB1."AFTER_5_CF"),
SUM(SUB1."SAME_DAY1_CF")
FROM
(SELECT TO_CHAR(ORDER_DATE, 'DD/MM/YYYY') AS "DATE",
ORDER_ID,
CASE
WHEN TO_CHAR(ORDER_DATE, 'DD/MM/YYYY') = TO_CHAR(SHIPPED_DATE,'DD/MM/YYYY')
AND TO_CHAR(ORDER_DATE, 'HH24') < 17
AND TO_CHAR(SHIPPED_DATE, 'HH24') < 22
THEN 1
ELSE 0
END AS "SAME_DAY",
CASE
WHEN TO_CHAR(ORDER_DATE, 'HH24') >= 17
THEN 1
ELSE 0
END AS "AFTER_5",
CASE
WHEN TO_CHAR(ORDER_DATE , 'DD-MM-YYYY') = TO_CHAR(SHIPPED_DATE - 1, 'DD-MM-YYYY')
AND TO_CHAR(ORDER_DATE , 'HH24') >= 17
AND TO_CHAR(SHIPPED_DATE, 'HH24') < 22
THEN 1
ELSE 0
END AS "AFTER_5_CF",
CASE
WHEN TO_CHAR(ORDER_DATE , 'DD-MM-YYYY') = TO_CHAR(SHIPPED_DATE - 1, 'DD-MM-YYYY')
AND TO_CHAR(ORDER_DATE , 'HH24') < 17
AND TO_CHAR(SHIPPED_DATE, 'HH24') < 22
THEN 1
ELSE 0
END AS "SAME_DAY1_CF"
FROM ORDER_HEADER
WHERE ORDER_DATE BETWEEN TO_TIMESTAMP('2019-11-07', 'YYYY-MM-DD') AND TO_TIMESTAMP('2019-11-13', 'YYYY-MM-DD')
)SUB1
GROUP BY SUB1."DATE"
上面的代码给了我我需要的一切,但总数应该是(总计 + 结转 + 5 之后)和“同一天”应该是(同一天 + 5 CF 之后 + 同一天 1 CF)
我已经尝试使用 LAG 给它上一个日期,但我不确定我是否正确使用它,如果没有办法做到这一点并在一行上显示信息,那很好。
如果我能完成这项工作,那么我应该能够处理周五、周六和周日,因为他们的结转需要添加到下周一。
解决方案
听起来您需要一个窗口子句来动态回顾一定数量的行。语法大致如下:
SUM(some_col) over ( order by col range between nn preceding and nn following)
这让当前行根据某个范围的大小“向后看”或向前看(例如向后看 3 天,向前看 1 天等)。在您的情况下,您希望根据当前数据动态更改该金额,即大多数日子我们回顾一天,但对于星期一,我们也希望回顾周末。
您可以通过在 window 子句中控制它的函数调用来实现这一点。巧合的是,作为窗口函数 SQL 系列的一部分,我做了一个完全涵盖该场景的教程。你可以在这里演示
https://www.youtube.com/watch?v=Y40v2Rwqs4Q&list=PLJMaoEWvHwFIUwMrF4HLnRksF0H8DHGtt&index=16
推荐阅读
- javascript - 使用 AJAX 在 iframe 中放置 videoID
- javascript - 在本机反应中隐藏动态生成的按钮
- c# - 有没有办法在 .NET 4 中使用 C# 6 或更高版本?
- json - AdaptiveCardsJson - 点击通话选项而不打开新 URL
- php - 使用存储库模式编写 REST API 的函数 update() 出现问题
- python - 使用类自变量作为默认类方法参数
- cmd - 根据文件类型扩展名更改文件名
- microsoft-cognitive - HoloLens 上的 onnx 1.2 模型(自定义视觉)
- javascript - 如何解决字体截取问题?
- elasticsearch - 更像这样 - 弹性搜索没有给出正确的结果