【发布时间】:2016-09-19 19:12:38
【问题描述】:
user_id product_type reservation_date used_date
|12345 | A | 2016-06-01 | 2016-06-24 |
|12345 | B | 2016-06-03 | 2016-06-24 |
|12345 | C | 2016-07-02 | 2016-07-30 |
|12346 | A | 2016-06-27 | 2016-07-24 |
|12346 | B | 2016-06-29 | 2016-07-22 |
我想弄清楚我们平台上的“交叉销售”效应。
上表中,user_id12345在一个月(一天)内购买了product_typeA、B和C。
我想统计在reservation_date 中购买任何类型产品的用户数量,但在 30 天的时间间隔内至少购买了 2 个不同类型的产品。
有没有办法做到这一点?我已经写了一个如下所示的查询,但我认为这是不准确的,因为我无法以我希望查看输出的适当条件计算日期。
SELECT
DATE_TRUNC('month', reservation.date),
COUNT(DISTINCT(user.id)),
FROM reservation
INNER JOIN products ON products.id = reservation.product_id
INNER JOIN users ON users.id = reservation.user_id
WHERE products.type = 'A'
AND user.id IN(
SELECT user.id
FROM reservation
INNER JOIN products ON products.id = reservation.product_id
INNER JOIN users ON users.id = reservation.user_id
WHERE product.type in ('B','C')
GROUP BY 1,2 ORDER BY 1 DESC;
【问题讨论】:
-
请更详细地定义:
with the interval of 30 days in reserved date这是绝对时间范围还是两个不同product_type之间的最大间隔?并始终声明您的 Postgres 版本。而user.id不是有效的列名。
标签: sql postgresql