【问题标题】:How to update value depends on latest date in postgres如何更新值取决于 postgres 中的最新日期
【发布时间】:2022-09-30 15:30:26
【问题描述】:

我有如下表

col date
a   2022-07-26
a   2022-07-27
c   2022-08-02
d   2022-07-28

我想更新最新日期列的值

update table
set date = \'2022-09-30\'
where col=\'a\'
and // some logic

我想要的结果如下

col date        
a   2022-07-26   
a   2022-09-30
c   2022-08-02
d   2022-07-28

如何选择最新日期和更新?

谢谢

    标签: sql postgresql


    【解决方案1】:

    我们可以在这里使用更新连接方法:

    UPDATE yourTable t1
    SET date = '2022-09-30'::date
    FROM (
        SELECT col, MAX(date) AS max_date
        FROM yourTable
        GROUP BY col
    ) t2
    WHERE t2.col = t1.col AND
          t2.max_date = t1.date AND
          t1.col = 'a';
    

    上面别名为t2 的子查询将只针对每个col 组的最新日期记录。然后我们为该记录设置日期,col = a

    【讨论】:

      【解决方案2】:

      一种简单易读的方法是简单地更新 MAX(date) 的记录。

      UPDATE table 
         SET date = '2022-09-30' 
       WHERE col = 'a' 
         AND date = (SELECT MAX(date) FROM table WHERE col = '0');
      

      这是假设您只想更新 a 和这 1 条记录。 如果您想在最高日期更新每个“col”,例如使用 CTE;

      WITH CTE_max_dates AS (SELECT col, max(date) FROM table)
      UPDATE t
         SET date = '2022-09-30'
        FROM table t
        JOIN CTE_max_dates cte
          ON t.col = cte.col
         AND t.date = cte.date
      

      【讨论】:

        猜你喜欢
        • 2020-11-29
        • 2012-08-31
        • 2017-06-27
        • 2016-10-22
        • 1970-01-01
        • 1970-01-01
        • 2011-09-14
        • 1970-01-01
        • 2022-08-11
        相关资源
        最近更新 更多