【发布时间】:2017-09-15 09:07:00
【问题描述】:
假设我们有一张这样的表格:
| Year | Month | Day | ID_Office | Operations | Operations yesterday |
|------|-------|-----|-----------|------------|----------------------|
| 2016 | 12 | 31 | 9555 | 500 | 0 |
| 2017 | 1 | 1 | 9555 | 600 | 0 |
| 2017 | 1 | 2 | 9555 | 750 | 0 |
| 2017 | 1 | 3 | 9556 | 800 | 0 |
我想使用上一行中的“操作”更新“昨天的操作”中的值。所以结果表一定是这样的:
| Year | Month | Day | ID_Office | Operations | Operations yesterday |
|------|-------|-----|-----------|------------|----------------------|
| 2016 | 12 | 31 | 9555 | 500 | 0 |
| 2017 | 1 | 1 | 9555 | 600 | 500 |
| 2017 | 1 | 2 | 9555 | 750 | 600 |
| 2017 | 1 | 3 | 9556 | 800 | 0 |
我将以下代码与函数 LAG() 一起使用,但它没有更新正确的值。
Update table1 F1
Set f1.operations_yesterday =
(Select LAG(f1.operations, 1, 0) OVER(ORDER BY year, month, day)
From table1 F2
Where
F1.year= F2.year And
F1.month= F2.month And
F1.day= F2.day);
你能从我的代码中给我一些关于到底哪里错的建议吗? 我在“Insert Into”语句上使用 lag() 函数取得了成功,但在这种情况下,我必须提供一个 Update 语句解决方案。
注意: 请注意,排序的字段可能超过三个。我仅以年、月和日为例,但还有更多与日期无关的字段。 此外,重要的是要详细说明并非每天都有价值。
提前谢谢你!
【问题讨论】:
-
我自己没有使用过
LAG(),但我想知道您是否不应该在以下脚本中使用f2,而不是f1:...Select LAG(f1.operations, 1, 0)...跨度> -
@PeterAbolins 确实,这是最初尝试过的,但它仍然无法正常工作。
标签: sql oracle sql-update