sql - 使用 LEAD 函数提取数据减去天数
问题描述
我有PRODUCTINFO
2 列的表:PRODUCTID (NUMBER)
,ALLOWFROM (DATE)
现在我需要再插入一列ALLOWTO (DATE)
,这等于ALLOWFROM
下一行减去 1 天。如果,没有下一个ALLOWFROM
,应该打印出来。PRODUCTID
'01-01-1900'
CREATE TABLE PRODUCTINFO (
PRODUCTID NUMBER (8,0)
ALLOWFROM DATE
);
INSERT INTO PRODUCTINFO
(PRODUCTID, ALLOWFROM)
VALUES (1, '05.01.2018')
INSERT INTO PRODUCTINFO
(PRODUCTID, ALLOWFROM)
VALUES (1, '06.05.2018')
INSERT INTO PRODUCTINFO
(PRODUCTID, ALLOWFROM)
VALUES (1, '06.10.2018')
INSERT INTO PRODUCTINFO
(PRODUCTID, ALLOWFROM)
VALUES (1, '06.20.2018')
INSERT INTO PRODUCTINFO
(PRODUCTID, ALLOWFROM)
VALUES (2, '05.01.2018')
INSERT INTO PRODUCTINFO
(PRODUCTID, ALLOWFROM)
VALUES (2, '06.18.2018')
INSERT INTO PRODUCTINFO
(PRODUCTID, ALLOWFROM)
VALUES (3, '05.01.2018')
INSERT INTO PRODUCTINFO
(PRODUCTID, ALLOWFROM)
VALUES (3, '06.08.2018')
我尝试执行此脚本,但没有结果:
SELECT PRODUCTID, ALLOWFROM,
LEAD(ALLOWTO, 3,'01-01-1900') OVER (ORDER BY ALLOWFROM) - 1 AS ALLOWTO
FROM PRODUCTINFO
ORDER BY PRODUCTID, ALLOWFROM;
我哪里错了?如何达到结果?
解决方案
这是你需要的吗?我按产品 ID 订购(这不在您的问题中,但似乎很明显)。建议您阅读有关 LEAD/LAG 的文档以熟悉这些论点。
SELECT productid,
allowfrom,
LEAD(allowfrom - 1,1, TO_DATE('01.01.1900', 'MM.DD.YYYY'))
OVER(PARTITION BY productid ORDER BY allowfrom ASC) AS allowto
FROM productinfo;
PRODUCTID ALLOWFROM ALLOWTO
---------- ---------- ----------
1 05.01.2018 06.04.2018
1 06.05.2018 06.09.2018
1 06.10.2018 06.19.2018
1 06.20.2018 01.01.1900
2 05.01.2018 06.17.2018
2 06.18.2018 01.01.1900
3 05.01.2018 06.07.2018
3 06.08.2018 01.01.1900
推荐阅读
- html - 关闭一个手风琴选项卡默认打开另一个
- javascript - 为 longtap 创建一个自定义事件,如“点击”
- php - 使用 Laravel 干预图像上传到 S3 返回布尔值而不是路径
- c# - 在 Word 2016 中检测比较窗口
- reactjs - 状态返回空数组
- javascript - 如何在从命令行运行时调试 js CLI 应用程序?
- c++ - 如何在包含数字 9 4 3 6 的 .bmp(二进制图像)中执行组件标记?
- kubernetes - 如果我想在 kubernetes 中使用 NodePort,如何知道节点中哪个端口可用
- javascript - 使用 Electron 重新加载后无法访问 SVG DOM
- python - 调用批处理文件从 VBA 运行 python 脚本