只要有一个标准的订单表:
尝试编写一个查询,为每个客户生成一个列,显示自上次购买以来的天数。如果客户没有先前的订单,则该值将为零。
我试过这样的事情:
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 笔交易,这是一个缺点。
谢谢
你应该使用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()将其更改为零。
| 归档时间: |
|
| 查看次数: |
737 次 |
| 最近记录: |