【问题标题】:Difference between datetime across multiple rows多行日期时间之间的差异
【发布时间】:2021-10-19 19:03:50
【问题描述】:

我需要计算客户第一次预订和第二次预订之间的平均时间差。在源表中,客户可以有一个或多个预订。该表显示了 3 个唯一客户以及每个预订的创建时间。

我使用以下查询生成了这张表

select b.customer_id, b.time_created
from booking b
order by b.customer_id

客户预订

customer_id time_created
32 2021-05-15 10:00:00:000
32 2021-05-24 10:00:00:000
59 2021-05-27 14:00:00:000
71 2021-06-04 15:00:00:000
71 2021-06-05 17:00:00:000
71 2021-06-06 18:00:00:000

期望的输出

customer_id datetime_diff
32 diff 2021-05-24 10:00:00:000 - 2021-05-15 10:00:00:000)
59 -
71 (2021-06-05 17:00:00:000 - 2021-06-04 15:00:00:000)

更新

customer_id datetime_diff
1
100 55455498365000
10005 934039000000
10011 120000
10044 634051554000
10053 516000000

【问题讨论】:

    标签: sql postgresql date-arithmetic


    【解决方案1】:

    您可以使用窗口函数。一种方法:

    select customer_id,
           max(time_created) - nullif(min(time_created), max(time_created)) as time_diff
    from (select b.*,
                 row_number() over (partition by customer_id order by time_created) as seqnum
          from booking b
         ) b
    where seqnum <= 2
    group by customer_id;
    

    Here 是一个 dbfiddle。

    【讨论】:

    • 我收到一个错误错误:关系“t”不存在
    • @James 使用您的真实表名:from booking t
    • 好的,谢谢,现在有数据回来了,但是 time_diff 是一个数字,它可以转换成人类可读的吗?
    • @James 。 . .我不确定你是什么意思。您可以随意格式化结果。
    • 我不完全确定这个 sql 在做什么。但这就是每个特定 customer_id 的第一次和第二次预订之间的差异吗?
    猜你喜欢
    • 2012-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 2011-02-01
    • 2021-12-27
    相关资源
    最近更新 更多