【发布时间】:2019-06-20 15:44:34
【问题描述】:
我想用上面一行的值更新表格的每一行,这取决于一些值。
假设我的桌子是这样的:
|storeID| Date | Stock | Medition | Regularized |
--------------------------------
| 1 |2019-01-01| 500 | 550 | 1 |
| 1 |2019-01-02| 500 | 0 | 0 |
| 1 |2019-01-03| 500 | 0 | 0 |
| 2 |2019-01-01| 250 | 300 | 1 |
| 2 |2019-01-02| 250 | 350 | 0 |
| 2 |2019-01-03| 250 | 0 | 0 |
输出必须如下所示:
|storeID| Date | Stock | Medition | Regularized |
--------------------------------
| 1 |2019-01-01| 500 | 550 | 1 |
| 1 |2019-01-02| 550 | 0 | 0 |
| 1 |2019-01-03| 550 | 0 | 0 |
| 2 |2019-01-01| 250 | 300 | 1 |
| 2 |2019-01-02| 300 | 350 | 0 |
| 2 |2019-01-03| 300 | 0 | 0 |
当店铺正规化后,其库存量必须为第二天的药量。
有时已经进行了调解,但库存尚未规范化。
我用递归表尝试了一些东西,并阅读了一些类似问题的帖子 (Update record with previous row),但我仍然无法解决我的问题。
**想象一下我有一个装满燃料的油箱。每天我都有销售和投入,坦克的库存也在变化。 任何一天我都可以做一个冥想来检查真正的股票(冥想)是否与我在“书籍”(股票)中写的股票匹配 如果它不同并且我检查为最后一列(Regularized),那么第二天的库存将是我前一天所做的调整。 如果我最后一列检查为 0,即使我做了冥想,库存也将与前一天相同。
感谢您为我提供的所有帮助。
【问题讨论】:
-
为什么
stock的最后一行的值为300而不是350? -
任何时候您尝试过某事但没有成功,请发布您尝试过的内容以及结果出了什么问题。为什么您无法使用 LAG 或 LEAD 功能解决此问题?为什么不应该将此问题作为您链接到的问题的副本关闭?
-
最后一行有股票300,因为正则化列最后一天有0,所以股票没有被改变。
-
所以更改是递归的,因为它需要使用第一行的值(对于该 storeID)?
-
@larnu 似乎错误地写在第一位
标签: sql sql-server