如何将最大日期的 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_date 和 max_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;
我是 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_date 和 max_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;