I have two tables, jobs
and users
The example structure from jobs
is
id | created_at |
---|---|
444 | 2022-12-12 08:00:00 |
333 | 2022-12-12 09:00:00 |
222 | 2022-12-12 10:00:00 |
555 | 2022-12-12 07:00:00 |
111 | 2022-12-12 12:00:00 |
888 | 2022-12-12 08:00:00 |
and users
id | user_id | job_id |
---|---|---|
1 | 2 | 111 |
2 | 1 | 222 |
3 | 1 | 333 |
4 | 1 | 444 |
5 | 2 | 555 |
6 | 2 | 888 |
I need to get the first and last job id for each day for each user in the same row. So the result should look something like this.
user_id | date | first_id | last_id |
---|---|---|---|
1 | 2022-12-12 | 444 | 222 |
2 | 2022-12-12 | 555 | 111 |
CodePudding user response:
select distinct u.user_id
,date(created_at) as date
,first_value(j.id) over(partition by user_id, date(created_at) order by created_at) as first_id
,first_value(j.id) over(partition by user_id, date(created_at) order by created_at desc) as last_id
from jobs j join users u on u.job_id = j.id
user_id | date | first_id | last_id |
---|---|---|---|
2 | 2022-12-12 | 555 | 111 |
1 | 2022-12-12 | 444 | 222 |