我在MySQL有一个销售表如下:
CustomerID OrderDate
101 2014-12-11
102 2014-12-13
101 2014-12-14
103 2014-12-15
... ...
如果我想知道哪些客户在任何10天内订购超过5次,或者更常见,在任何k天内订购m次,我该怎么办?我已尝试过自我加入,但无法在任何k天内获得结果。
答案 0 :(得分:1)
您可以这样做:
SELECT customerID, OrderDate, COUNT(*) AS num, (SELECT OrderDate FROM table AS b WHERE b.OrderDate < t.OrderDate + INTERVAL 10 DAY ORDER BY OrderDate DESC LIMIT 1) AS EndDate
FROM table AS t
GROUP BY customerID, EndDate
HAVING OrderDate <= EndDate AND num >= 2
它将返回客户超过5个订单的所有期间。请注意,如果他的订单超过5个,例如2个或更多个期间,那么您将为同一个客户提供多个记录。如果您希望每个客户使用一行,只需使用DISTINCT
选择
答案 1 :(得分:0)
这样的事情会起作用吗?
select x.CustomerId from (
select CustomerID, count(CustomerID) as customerCount from table where OrderDate > DATE_SUB(NOW(),INTERVAL 10 DAY)
) x
where x.customerCount > 5
我还没来得及测试它,特别是日期减去部分,但这种事情在过去对我有用。