SQL-减去两个连续记录中的日期,然后求平均值

SQL-减去两个连续记录中的日期,然后求平均值,sql,postgresql,Sql,Postgresql,我已经在这上面呆了很长时间了。 假设您有一个名为Stays的表,其中显示了每个人在特定酒店的入住和退房日期: 假设每次入住(入住和退房)只有两条记录,退房日期始终在入住日期之后。 您如何计算一个人在这家酒店的平均住宿天数(即入住日期和退房日期之间的平均住宿天数)?在伪代码中,我知道对于每个stay_id,我必须使用DATEDIFF减去签出日期-签入日期,然后得到所有结果的平均值,也许还需要使用LAG window函数?我把桌子放在小提琴里,我被卡住了。预期结果将是: +-----+ | AVG

我已经在这上面呆了很长时间了。
假设您有一个名为Stays的表,其中显示了每个人在特定酒店的入住和退房日期:


假设每次入住(入住和退房)只有两条记录,退房日期始终在入住日期之后。
您如何计算一个人在这家酒店的平均住宿天数(即入住日期和退房日期之间的平均住宿天数)?在伪代码中,我知道对于每个stay_id,我必须使用DATEDIFF减去签出日期-签入日期,然后得到所有结果的平均值,也许还需要使用LAG window函数?我把桌子放在小提琴里,我被卡住了。预期结果将是:

+-----+
| AVG |
+-----+
|   2 |
+-----+

这是你的问题。您只需要
左连接
签出类型

select avg(date_part('day', t2.dated::timestamp - t1.dated::timestamp)) from test t1
left join test t2 on t2.event_type = 'check-out' and t1.stay_id = t2.stay_id
where t1.event_type = 'check-in'

哇,这真管用!啊,我明白了,这需要一个自我加入,我的弱点哈哈。非常感谢你!
select avg(date_part('day', t2.dated::timestamp - t1.dated::timestamp)) from test t1
left join test t2 on t2.event_type = 'check-out' and t1.stay_id = t2.stay_id
where t1.event_type = 'check-in'