Oracle 使用特定值更新最后一个条目列

Posted

技术标签:

【中文标题】Oracle 使用特定值更新最后一个条目列【英文标题】:Oracle Update last entry column with specific values 【发布时间】:2019-12-17 12:15:29 【问题描述】:

我正在尝试在 Oracle Apex 平台上更新表中的一行,更具体地说,是从具有相同序列号的最后一个条目中获取 present_indication 值,并将其作为 previous_indication 放在新行中。 我的表 HYDRO_COUNTS 是这样的:

OID,SERIAL_NUMBER,PROV_NUMBER,HDRCNTS_PREVIOUS_IND,HDRCNTS_PRESENT_IND 

到目前为止,我已经尝试了很多关于使用相同的 SERIAL_NUMBER 和 PROV_NUMBER 获取最后输入的值的查询,但没有任何效果。这是我的更新查询。

UPDATE HYDRO_COUNTS
SET HDRCNTS_PREVIOUS_IND = (SELECT HDRCNTS_PRESENT_IND FROM HYDRO_COUNTS WHERE PROV_NUMBER = 
:P20_PROV_NUMBER AND SERIAL_NUMBER = :P20_SERIAL_NUMBER )
WHERE OID = :P20_OID ;

【问题讨论】:

样本数据和期望的结果会有很大帮助。 例如,假设我在某个日期运行测试并将机器的指示插入到我的表中,一段时间后我再次在同一台机器上运行测试,所以我希望能够查看最后一个指示,以便将其与新指示进行比较。 【参考方案1】:

如果OID 是一个始终递增的唯一列,您可以执行类似的操作

UPDATE HYDRO_COUNTS
  SET HDRCNTS_PREVIOUS_IND = (SELECT HDRCNTS_PRESENT_IND
                                FROM HYDRO_COUNTS
                                WHERE PROV_NUMBER = :P20_PROV_NUMBER AND
                                      SERIAL_NUMBER = :P20_SERIAL_NUMBER AND
                                      OID = (SELECT MAX(OID)
                                               FROM HYDRO_COUNTS
                                               WHERE PROV_NUMBER = :P20_PROV_NUMBER AND
                                                     SERIAL_NUMBER = :P20_SERIAL_NUMBER AND
                                                     OID < :P20_OID)
  WHERE OID = :P20_OID

【讨论】:

OID 确实是通过递增序列产生的!当我阅读您的答案时,语法和逻辑对我来说似乎都是正确的,但是由于某些未知的原因,它一直对我无能为力.. 你的代码是正确的 Bob,我在 Apex 中犯了一个错误,所以这就是它不起作用的原因。非常感谢您的帮助伙伴!

以上是关于Oracle 使用特定值更新最后一个条目列的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL:使用字母数字 ID 在特定值之后选择接下来的 100 行

SQL 更新表中的所有条目,但在列上插入不同的值

仅包含具有特定列值的第一个条目

Pandas DataFrame 按分类列排序,但按特定类排序

Sharepoint Online / 365 - 从列表视图中删除多个附加列和显示条目的“查看条目”

访问 Map 中的最后一个条目