Good afternoon! Could anyone help me to solve the task? I have a table:
Id | Date | Reason |
---|---|---|
1 | 2020-01-01 10:00 | Departure |
1 | 2020-01-01 12:20 | Arrival |
1 | 2020-01-02 14:30 | Departure |
1 | 2020-01-02 19:20 | Arrival |
1 | 2020-01-03 15:40 | Departure |
1 | 2020-01-04 19:20 | Arrival |
2 | 2020-02-03 15:40 | Departure |
2 | 2020-02-04 19:20 | Arrival |
3 | 2020-03-05 15:40 | Departure |
3 | 2020-03-05 19:20 | Arrival |
3 | 2020-03-06 16:28 | Departure |
3 | 2020-03-06 21:00 | Arrival |
I need to estimate average duration of each ID. At first step I want to get table, for example for id = 1, as
Id | Duraton (minutes) |
---|---|
1 | 140 |
1 | 290 |
1 | 1660 |
How can I achive that by T-Sql query?
CodePudding user response:
Assuming the rows are perfectly interleaved, you can use lead()
:
select t.*,
datediff(minute, date, next_date) as diff_minutes
from (select t.*,
lead(date) over (partition by id order by date) as next_date
from t
) t
where reason = 'Departure';
If you want the results for only one id
, you can filter in either the subquery or the outer query.