【发布时间】:2019-11-09 07:46:40
【问题描述】:
我有一个包含每月金额和上个月金额的表格。
如果不存在,我每个月都需要携带上个月的金额。
为了更好地解释(并通过示例),我可能有以下数据;
Month,Amount,Previous
2019-01-01,100,0
2019-02-01,100,100
2019-03-01,100,null
2019-04-01,100,null
2019-05-01,100,200
2019-06-01,100,null
所以我想把 100 带到 3 月和 4 月,然后把 200 带到 6 月,所以看起来像这样;
Month,Amount,Previous
2019-01-01,100,0
2019-02-01,100,100
2019-03-01,100,100
2019-04-01,100,100
2019-05-01,100,200
2019-06-01,100,200
我只是一头雾水,我知道有办法,但头脑根本没有把它放在一起。
我认为这将涉及同一张表上的 LEFT JOIN 并获得一个 MIN 月份值,其中日期大于上个月的值但不大于下个月的值。
或者它将在 WHERE 子句和 LEFT JOIN 中执行子查询。
到目前为止,我已经管理了以下内容,但它为之前的每个值(100 和 200)复制了 5 月和 6 月的行。
SELECT
*
FROM
table1 t1
LEFT JOIN
table1 t2 ON
t1.month > t2.month
Month,Amount,Previous
2019-01-01,100,0
2019-02-01,100,100
2019-03-01,100,100
2019-04-01,100,100
2019-05-01,100,200
2019-05-01,100,100
2019-06-01,100,200
2019-06-01,100,100
【问题讨论】:
-
您在前几个月加入了所有,而不仅仅是前一个月。