如何将最大日期的 ID 添加到与所有行一起输出

How to add the ID of max date to output along with all rows

我是 SQL 的新手。我有这个 table T1.

user date_created source target
paul 12/21/2021 Aus India
john 12/22/2021 Aus India
john 12/23/2021 India Pak
paul 12/24/2021 India Pak
john 12/25/2021 USA Japan
ruby 12/26/2021 USA EU
john 12/27/2021 USA EU
ruby 12/28/2021 USA Japan

我想要以下内容作为输出。

user date_created source target max_date max_date_user
paul 12/21/2021 Aus India 12/22/2021 john
john 12/22/2021 Aus India 12/22/2021 john
john 12/23/2021 India Pak 12/24/2021 paul
paul 12/24/2021 India Pak 12/24/2021 paul
john 12/25/2021 USA Japan 12/28/2021 ruby
ruby 12/26/2021 USA EU 12/27/2021 john
john 12/27/2021 USA EU 12/27/2021 john
ruby 12/28/2021 USA Japan 12/28/2021 ruby

我需要输出中的所有行和列,以及另外 2 列 max_datemax_date_user。我希望这 2 个附加列的输出根据源和目标的串联查找 max date/user。 我可以使用以下查询添加和获取 max_date 列。

select 
    *,
    max(date_created) over (partition by concat(source ,target)) as "max_date"
from 
    t1

但对于 max_date_user,我无法获得所需的输出。任何人都可以帮助我如何实现这一目标。

一个选项,使用 ROW_NUMBER 和旋转逻辑:

WITH cte AS (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY source, target
                                 ORDER BY date_created DESC) rn
    FROM t1
)

SELECT user, date_created, source, target,
       MAX(CASE WHEN rn = 1 THEN date_created END) OVER
           (PARTITION BY source, target) max_date,
       MAX(CASE WHEN rn = 1 THEN user END) OVER
           (PARTITION BY source, target) max_date_user
FROM cte
ORDER BY
    date_created;