I have a table about shipping that has information about the arrival (country and date) to a port. Now I need to extract the country where it departed from using the previous row entries. The table looks like this
| 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 |
I want to obtain the departure for each ID based on the previous ArrivalDate so it would look like this
| 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 |
I can obtain the previous Country based only on DateArrival with:
select
pc.*,
lag(pc.CountryArrival) over (order by DateArrival) as DeparturePort
from shipping pc
where pc.DateArrival is not null;
Any idea how to get the previous arrival for matching IDs?
CodePudding user response:
You need to PARTITION BY the ID column.
lag(pc.CountryArrival) over (PARTITION BY ID order by DateArrival) as DeparturePort
