根据匹配 ID 的时间戳获取上一行值

Get previous row value based on a timestamp for matching IDs

我有一个 table 关于航运的信息,其中包含到达港口的信息(国家和日期)。现在我需要使用前面的行条目提取它离开的国家/地区。 table 看起来像这样

ID CountryArrival DateArrival
1 BE 1-1-2022
2 US 1-1-2022
1 NL 2-1-2022
2 IT 4-1-2022
1 PT 5-1-2022

我想根据之前的 ArrivalDate 获取每个 ID 的出发时间,所以它看起来像这样

ID CountryArrival DateArrival DeparturePort
1 BE 1-1-2022 NULL
2 US 1-1-2022 NULL
1 NL 2-1-2022 BE
2 IT 4-1-2022 US
1 PT 5-1-2022 NL

我可以仅基于 DateArrival 获得以前的国家:

select 
 pc.*,
    lag(pc.CountryArrival) over (order by DateArrival) as DeparturePort
from shipping pc
where pc.DateArrival is not null;

知道如何为匹配的 ID 获取之前到达的时间吗?

您需要 PARTITION BY ID 列。

 lag(pc.CountryArrival) over (PARTITION BY ID order by DateArrival) as DeparturePort