【问题标题】:Find time difference between two most recent orders查找两个最近订单之间的时差
【发布时间】:2019-08-25 13:02:47
【问题描述】:

我试图通过查找最近的订单和第二个最近的订单之间的时间差,然后将该差添加到最近的订单中来估计来自回头客的新订单的时间。

我一直在尝试限制和偏移,但这会返回每一行的总括日期。我在想我需要做一个横向连接,但不知道如何正确实现它。当我尝试这样做时,我没有收到任何输出。

select public.orders.customer_id,
       max(public.orders.created_at) as last_order_date,
       (select created_at from public.orders group by created_at order by created_at desc limit 1 offset 1) as second_last
from public.orders
inner join
(select
customer_id, count(*)
from public.orders
where status  = 'fulfilled'
group by public.orders.customer_id
having count(customer_id) >1) repeat_customers
on public.orders.customer_id = repeat_customers.customer_id
group by public.orders.customer_id;

我希望 second_last 字段由每个 customer_id 的第二个最近日期填充,但输出是整个表的第二个最近日期,导致每个条目的日期相同。

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    对于您的 second_last 列,您并没有限制每个客户,它确实会找到所有内容的最大值,就像您看到的结果一样。请参阅下面示例中的 WHERE 子句,它应该可以解决这个问题:

    (SELECT
        created_at
    FROM
        public.orders po
    WHERE
        po.customer_id = customer_id
    ORDER BY
        created_at
    LIMIT 1 OFFSET 1) AS second_last
    

    我还给表起了别名,因为我不确定它是否会抱怨歧义,因为在主选择中提到了同一个表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-15
      • 2017-12-21
      • 2015-03-19
      相关资源
      最近更新 更多