使用连续第二个最早的日期更新 table 列?

Updating a table column with the 2nd oldest date in a row?

我想更新日期 1 列的内容以反映每一行的第二大 日期。 table 有数千行和约 15 列,其中只有少数是日期。我过去使用最少的功能来用每一行中最旧的日期更新此列,但我不知道如何用第二个最旧的日期更新它(第 1 行和第 04 行为 1/15/2020/在这种情况下,第 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

最简单的选择可能是逆轴旋转:

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