用于识别在k天内订购超过m次的客户的SQL

时间:2015-10-06 07:22:36

标签: mysql

我在MySQL有一个销售表如下:

CustomerID    OrderDate
101           2014-12-11
102           2014-12-13
101           2014-12-14
103           2014-12-15
...           ...

如果我想知道哪些客户在任何10天内订购超过5次,或者更常见,在任何k天内订购m次,我该怎么办?我已尝试过自我加入,但无法在任何k天内获得结果。

2 个答案:

答案 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

我还没来得及测试它,特别是日期减去部分,但这种事情在过去对我有用。