根据匹配 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
我有一个 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