y已存在大于0的读数,在这种情况下,仪表读数将从该值开始。但最重要的指标是在旧的“抄表”列中有数据。您要添加的附加列是什么?非常感谢,这几乎是我想要的,但正如您在SqlFIDLE中看到的,建议的SQL将值向上移动,例如,在2004-02-23和2004-1
y已存在大于0的读数,在这种情况下,仪表读数将从该值开始。但最重要的指标是在旧的“抄表”列中有数据。您要添加的附加列是什么?非常感谢,这几乎是我想要的,但正如您在SqlFIDLE中看到的,建议的SQL将值向上移动,例如,在2004-02-23和2004-1,sql,oracle,plsql,Sql,Oracle,Plsql,y已存在大于0的读数,在这种情况下,仪表读数将从该值开始。但最重要的指标是在旧的“抄表”列中有数据。您要添加的附加列是什么?非常感谢,这几乎是我想要的,但正如您在SqlFIDLE中看到的,建议的SQL将值向上移动,例如,在2004-02-23和2004-10-04之间,所有更新的抄表应为2312(因为前一个日期的价值较高)但是,对于2004-10-04,SQL的更新值为2889。从2004-10-04到2006-11-06的电表读数都是正确的,因此这些日期的更新电表读数将是相同的。只有当之前的日
y已存在大于0的读数,在这种情况下,仪表读数将从该值开始。但最重要的指标是在旧的“抄表”列中有数据。您要添加的附加列是什么?非常感谢,这几乎是我想要的,但正如您在SqlFIDLE中看到的,建议的SQL将值向上移动,例如,在2004-02-23和2004-10-04之间,所有更新的抄表应为2312(因为前一个日期的价值较高)但是,对于2004-10-04,SQL的更新值为2889。从2004-10-04到2006-11-06的电表读数都是正确的,因此这些日期的更新电表读数将是相同的。只有当之前的日期在电表更改后有一个更高的值时,我们才在另一个电表更改前用最小值进行更正。@tintin是的,我想你可以在中添加逻辑。虽然你可能最终不得不在PL/SQL中循环这个问题。我会在答案中添加一些逻辑。@tintin,我真的很想避免PL/SQL,但我在更新时不断出错。因此,与将update子句放大到200行不同,这更容易。这应该对你有用。
PUMP_NO INSPECTION_DATE MAINTENANCE_TASK METER_READING OLD_METER_READING TOTAL_PUMP_LIFE
11 11-AUG-2000 A 12489 12489
11 14-JUL-2001 B 14007 14007
11 03-SEP-2002 Y 0 14007 14007
11 03-SEP-2002 C 0 14007 14007
11 03-SEP-2002 B 0 14007 14007
11 04-JUN-2003 A 1200 16007
11 21-DEC-2003 A 8000 22007
11 23-FEB-2004 Y 0 10000 24007
11 26-MAY-2004 B 10 24017
11 26-MAY-2004 P 20 24027
11 26-MAY-2004 R 300 24307
11 04-OCT-2004 B 2312 26319
11 31-MAR-2005 A 2889 26896
11 06-NOv-2006 V 5000 29007
11 14-JUL-2008 T 0 7000 31007
PUMP_NO INSPECTION_DATE MAINTENANCE_TASK METER_READING OLD_METER_READING TOTAL_PUMP_LIFE
11 11-AUG-2000 A 12489 12489
11 14-JUL-2001 B 14007 14007
11 03-SEP-2002 Y 0 14007 14007
11 03-SEP-2002 C 0 14007 14007
11 03-SEP-2002 B 0 14007 14007
11 04-JUN-2003 A 1200 16007
11 21-DEC-2003 A 8000 22007
11 23-FEB-2004 Y 0 10000 24007
11 26-MAY-2004 B 10000 34007
11 26-MAY-2004 P 10000 34007
11 26-MAY-2004 R 10000 34007
11 04-OCT-2004 B 2312 26319
11 31-MAR-2005 A 2889 26896
11 06-NOV-2006 V 5000 29007
11 14-JUL-2008 T 0 7000 31007
update MyTable mt1
set value = (select min(value)
from MyTable2 mt2
where mt1.id = mt2.id --your relation
and value NOT IN (select min(value)
from MyTable2 mt3
where mt2.id = mt3.id))