【发布时间】:2019-04-29 03:45:06
【问题描述】:
一个 csv 文件包含“user_ids”和“order_dates”。一个用户可能有多个订单日期,但不能在同一天。确定新用户在使用产品后的前 29 天内下的订单总数。用户最早的订单输入 = 第 1 天。
例如:用户在 2018 年 1 月 1 日首次购买;在 2018 年 1 月 29 日之前下达的任何额外订单都将被计算在内。之后的任何订单历史记录均不予考虑。
我使用了 SQL fiddle,并且在获得返回给我的订单计数方面取得了进展。但是,返回的结果仅限于要求的 29 天内。
使用 between 子句应该将查询限制为在每个用户的前 29 天内报告销售额,但事实并非如此。
CREATE TABLE mytable
(
user_id int,
order_date Date
);
INSERT INTO mytable(user_id,order_date) VALUES (5963,'2018-01-01');
INSERT INTO mytable(user_id,order_date) VALUES (5963,'2018-01-29');
INSERT INTO mytable(user_id,order_date) VALUES (5963,'2018-01-30');
INSERT INTO mytable(user_id,order_date) VALUES (5962,'2018-01-01');
INSERT INTO mytable(user_id,order_date) VALUES (5962,'2018-02-25');
INSERT INTO mytable(user_id,order_date) VALUES (5962,'2018-04-03');
SELECT
user_id,
COUNT(order_date) AS total_orders
FROM
mytable
GROUP BY 1
having
ROUND(julianday(order_date) - julianday(MIN(order_date))) <= 29
order by 1 desc;
在上面的代码中:
- user_id = 5963:总共返回 3 个订单,预计为 2 个。
- user_id = 5962:总共返回 3 个订单,预计 1 个
【问题讨论】:
-
如何定义
new用户?