根据连接表的日期列之一的最大日期值执行更新 (Oracle)

Posted

技术标签:

【中文标题】根据连接表的日期列之一的最大日期值执行更新 (Oracle)【英文标题】:Perform Update Based On Max Date Value Of One of the Join Table's Date Column (Oracle) 【发布时间】:2017-11-29 12:38:20 【问题描述】:

我试图根据它与其他表的复杂关系来更新 Table_H 的“描述”列。这是原始的(有些模糊的)查询:

        UPDATE Table_H hb SET 
        description = 'New Description'
        where exists
        (select 1
        from TABLE_J j, TABLE_I i, TABLE_K k, Table_H h, TABLE_M m
        where j.Alt_id = i.Alt_id
        and i.id=k.id
        and k.id=h.id
        and k.Alt_id = m.Alt_id
        and j.Activity='Activity A'
        and h.description = 'Old Description'
        and h.id=hb.id
        );

这个查询的问题是它更新了太多的 Table_H 行(因为这些行与查询中其他表的行相关)。这是因为 Table_H 具有多个相同的行,但 Table_H.date 字段除外,该字段始终是唯一的。我真正需要做的是仅使用 MAX Table_H.date 字段更新 Table_H 行。

我无法找到与我的情况特别接近的旧线程。显然我必须介绍 Table_H.Date 列,但不知道如何进行。我将不胜感激。谢谢

【问题讨论】:

所以你只想更新日期最长的那一行? 是的,这是正确的 【参考方案1】:

我希望你需要这样的东西。

UPDATE Table_H hb
SET description = 'New Description'
WHERE EXISTS
  (SELECT 1
  FROM TABLE_J j,
    TABLE_I i,
    TABLE_K k,
    Table_H h,
    TABLE_M m
  WHERE j.Alt_id    = i.Alt_id
  AND i.id          =k.id
  AND k.id          =h.id
  AND k.Alt_id      = m.Alt_id
  AND j.Activity    ='Activity A'
  AND h.description = 'Old Description'
  AND h.id          =hb.id
  )
AND hb.date_t IN
  ( SELECT MAX(Date_t) FROM Table_H
  );

这里Date_t 是您的date 专栏

【讨论】:

谢谢。我尝试将“AND hb.date ...”添加到末尾。虽然它运行,但由于某种原因它没有更新任何列。 您没有任何记录满足这两个条件。【参考方案2】:

感谢您的回复。我找到了一种不直接使用日期列的方法。我改用了 max(table_h.id) 列(我意识到 max id 直接对应于 max(table_h.date) ,这使得查询更早编写)。这是解决方案。如果这对 *** 中的其他人来说不是一个很好的学习机会,我深表歉意:

UPDATE Table_H hb
SET description = 'New Description'
WHERE EXISTS
  (SELECT 1 from
(select max(h.id) hid, k.Alt_id
FROM TABLE_J j,
TABLE_I i,
TABLE_K k,
Table_H h,
TABLE_M m
WHERE j.Alt_id    = i.Alt_id
AND i.id          =k.id
AND k.id          =h.id
AND k.Alt_id      = m.Alt_id
AND j.Activity    ='Activity A'
AND h.description = 'Old Description'
GROUP BY k.alt_id) abc
WHERE abc.hid = hb.id
)

【讨论】:

以上是关于根据连接表的日期列之一的最大日期值执行更新 (Oracle)的主要内容,如果未能解决你的问题,请参考以下文章

用于创建具有数据框中每个日期的最小值和最大值的表的函数

如何根据创建标识符和最大日期的两列选择行

如何根据R中另一列的日期(月/日/年)计算列的年/月平均值、最大值、最小值等

pandas使用max函数和min函数计算dataframe日期(时间)数据列中最大日期和最小日期(maximum and minimum date or time in dataframe)

pandas使用max函数和min函数计算dataframe日期(时间)数据列中最大日期和最小日期对应的数据行(maximum and minimum date or time row)

根据另一列的值修改熊猫中的日期时间列