【问题标题】:Updating a table column with the 2nd oldest date in a row?使用连续第二个最旧的日期更新表列?
【发布时间】:2021-04-06 07:51:22
【问题描述】:

我想更新日期 1 列的内容以反映每一行的第二旧日期。该表有数千行和约 15 列,其中只有少数是日期。我过去使用最少的功能用每行中最旧的日期更新此列,但我不知道如何用第二个最旧的日期更新它(第 1 行和第 04 行的 2020 年 1 月 15 日/在这种情况下,第 2 行为 15/2020)。任何帮助将不胜感激。

ID Date 1 Date 2 Date 3 Date 4
001 01/14/2020 01/15/2020 01/16/2020
002 04/15/2020 03/20/2020 06/16/2020

【问题讨论】:

    标签: sql postgresql datetime sql-update lateral-join


    【解决方案1】:

    最简单的选择可能是反透视:

    select t.*, d.date
    from mytable t
    cross join lateral (
        select date
        from (values (t.date2), (t.date3), (t.date4)) d(date)
        order by d.date
        limit 1 offset 1
    ) d
    

    如果您想要update 声明:

    update mytable t
    set date1 = (
        select date
        from (values (date2), (date3), (date4)) d(date)
        order by d.date
        limit 1 offset 1
    )
    

    Demo on DB Fiddle

    【讨论】:

    • 非常感谢。在这里回答问题的人都是英雄。
    • 如果我想用行中最早的日期更新 Date 1 字段怎么办 (update mytable set date1 = least(date 2, date3, date4); select * from mytable) ,但更新日期 1 与第二旧日期仅在行中最旧日期已经过去的情况下(即日期 1
    • 如果我希望我提交一个新问题,我也可以这样做。
    • @Tboi:是的,您可能想为此提出一个新问题。
    猜你喜欢
    • 1970-01-01
    • 2012-01-01
    • 2021-12-15
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    • 2017-12-19
    • 1970-01-01
    • 2021-03-30
    相关资源
    最近更新 更多