我有一个如下所示的输入表
加载_日期 | 预计日期 | 总需求 | 滚动消费需求 |
---|---|---|---|
2020-01-01 | 2020-01-01 | 100 | 60 |
2020-01-01 | 2020-01-02 | 150 | 75 |
2020-01-01 | 2020-01-03 | 200 | 100 |
2020-01-01 | 2020-01-04 | 300 | 120 |
2020-01-01 | 2020-01-05 | 400 | 160 |
我的输出将是这样的:
加载_日期 | 预计日期 | 总需求 | 滚动消费需求 | 预计完成日期 |
---|---|---|---|---|
2020-01-01 | 2020-01-01 | 100 | 60 | 2020-01-03 |
2020-01-01 | 2020-01-02 | 150 | 75 | 2020-01-05 |
2020-01-01 | 2020-01-03 | 200 | 100 | --- |
2020-01-01 | 2020-01-04 | 300 | 120 | --- |
2020-01-01 | 2020-01-05 | 400 | 160 | --- |
您能帮我进行 SQL 查询吗?我尝试在 Databricks SQL 中编写查询,但没有得到此输出。其实这只是我整个需求的一小部分。
这里的逻辑是计算完成预计日期列,每当滚动消耗需求将超过特定预计日期的总需求时,它将返回该滚动消耗需求对应的预计日期。
如上表所示,预计日期 2020-01-01 的总需求为 100。但滚动消耗的需求在预计日期 2020-01-03 达到 100。因此,对于第一行,它将返回完成的预计日期为 2020-01-03。
与预计日期 2020-01-02 类似,滚动消耗的需求超过 2020-01-05 的总需求。由于 160 > 150。因此完成的预计日期将为 2020-01-05。
SELECT a.*, MIN(b.projected_date) as [Finished projected date]
FROM InputTable a
LEFT JOIN InputTable b ON a.[total demand] <= b.[rolling consumed demand]
GROUP BY a.Load_date, a.Projected_date, a.[total demand], a.[rolling consumed demand]