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))