我希望获得动态范围内的下一个值。在 X 点之前存在的所有值(由 TimeDate 列确定)之间,我想获取下一个最大的 ValueDate(如果存在)。查找可能类似于无界前行和当前行,并且很可能按 TimeDate 排序,但我还没有弄清楚如何使用 LAG/LEAD 或 FIRST/LAST VALUE 来执行此操作。
这是数据的样子以及我想要实现的目标:
一些索引 | 价值日期 | 时间日期 | 期望的结果 |
---|---|---|---|
1 | 2022年2月13日 | 2023年9月10日 | 空 |
1 | 2022年3月21日 | 2023年9月11日 | 空 |
1 | 2022 年 1 月 17 日 | 2023年9月12日 | 2022年2月13日 |
1 | 2022年2月28日 | 2023年9月13日 | 2022年3月21日 |
1 | 2021年12月19日 | 2023年9月14日 | 2022 年 1 月 17 日 |
1 | 2021年12月23日 | 2023年9月15日 | 2022 年 1 月 17 日 |
重要说明 - 尽管 ValueDate = '23.12.2021' 是 ValueDate = '19.12.2021' 之后的下一个最大值,但根据 TimeDate 列,它还不“存在”。
这里有一些快速生成数据的 SQL:
CREATE VOLATILE TABLE TempTable (
SomeIndex INTEGER,
ValueDate DATE FORMAT 'YYYY-MM-DD',
TimeDate DATE FORMAT 'YYYY-MM-DD')
PRIMARY INDEX (SomeIndex)
ON COMMIT PRESERVE ROWS;
INSERT INTO TempTable VALUES(1,'2022-02-13','2023-09-10');
INSERT INTO TempTable VALUES(1,'2022-03-21','2023-09-11');
INSERT INTO TempTable VALUES(1,'2022-01-17','2023-09-12');
INSERT INTO TempTable VALUES(1,'2022-02-28','2023-09-13');
INSERT INTO TempTable VALUES(1,'2021-12-19','2023-09-14');
INSERT INTO TempTable VALUES(1,'2021-12-23','2023-09-15');
您可以尝试使用相关子查询来实现此目的吗?我尝试过如下...
SELECT a.SomeIndex, a.ValueDate, a.TimeDate, b.ValueDate AS DesiredResult
FROM TempTable a LEFT JOIN TempTable b on b.TimeDate <= a.TimeDate
AND b.ValueDate = ( SELECT MIN(ValueDate)
FROM TempTable c
WHERE c.ValueDate > a.ValueDate AND c.TimeDate <= a.TimeDate)
ORDER BY a.TimeDate