自上次购买 postgres 后的天数(每次购买)

Jef*_*mes 5 postgresql

只要有一个标准的订单表:

  • 订单编号
  • 订购日期
  • 顾客ID
  • 合计订单

尝试编写一个查询,为每个客户生成一个列,显示自上次购买以来的天数。如果客户没有先前的订单,则该值将为零。

我试过这样的事情:

WITH user_data AS (
 SELECT customer_id, order_total, order_date::DATE,
   ROW_NUMBER() OVER (
     PARTITION BY customer_id ORDER BY order_date::DATE DESC
   )
   AS order_count
 FROM transactions
 WHERE STATUS = 100 AND order_total > 0
)
SELECT * FROM user_data WHERE order_count < 3;
Run Code Online (Sandbox Code Playgroud)

我可以将其输入到 tableau 中,然后使用一些表计算来处理数据,但我真的很想了解 SQL 方法。我的方法也只分析最近的 2 笔交易,这是一个缺点。

谢谢

kli*_*lin 2

你应该使用lag()函数

select *, 
    lag(order_date) over (partition by customer_id order by order_date) 
    as prior_order_date
from transactions
order by order_id
Run Code Online (Sandbox Code Playgroud)

要获得自上次订单以来的天数,只需从当前订单日期中减去前一个订单日期即可:

select *, 
    order_date- lag(order_date) over (partition by customer_id order by order_date)
    as days_since_last_order
from transactions
order by order_id
Run Code Online (Sandbox Code Playgroud)

null如果没有先前的订单,则查询选择。您可以使用coalesce()将其更改为零。