【发布时间】:2020-12-02 18:07:08
【问题描述】:
我有样本数据:
CREATE TABLE Orders(customerid int, orderdate datetime, orderqty int);
INSERT into Orders(customerid, orderdate, orderqty) VALUES
(1,'2020-11-25',100),(1,'2020-11-27',160),(2,'2020-12-05',3490),
(1,'2020-11-29',293),(2,'2020-12-07',293),(1,'2020-12-01',382);
sqlfiddle:http://sqlfiddle.com/#!9/d90aaf/1/0
我想从这些数据中筛选出今天(或日历中的任何给定日期)。用户可能会订购。从这个数据来看,每 2 天重复下单的 customerid=1 很有可能在 2020-12-03 再次下单。理想情况下,我希望仅对每个客户的最后 3 个订单执行此操作。 2020-12-03 的输出将是这样的:
customerid,last_orderdate,likelytoorder,sum_of_last_3_orderqty
1,2020-12-01,Yes,835
这里的另一个用户提供了这个答案:
(SELECT o2.*,MAX(ooo.orderdate) AS Latest3 FROM
(SELECT o1.*,MAX(oo.orderdate) AS Latest2 FROM
(SELECT customerid,MAX(orderdate) AS Latest1 FROM Orders GROUP BY customerid) o1
JOIN Orders oo ON o1.customerid=oo.customerid AND oo.orderdate<o1.Latest1 GROUP BY o1.customerid) o2
LEFT JOIN Orders ooo ON o2.customerid=ooo.customerid AND ooo.orderdate<o2.Latest2 GROUP BY o2.customerid) o3
JOIN orders oQ ON o3.customerid=oQ.customerid AND oQ.orderdate>=COALESCE(o3.Latest3,o3.Latest2,o3.Latest1)
GROUP BY o3.customerid
我试过了。
AND DATE(Latest1 + DATEDIFF(Latest1,IFNULL(Latest3,Latest2))/IF(Latest3 IS NULL,1,2)) = CURDATE()
但是没有输出。我不确定如何从 datediff 添加日期并将其与当前日期进行比较。 它的作用是按顺序给出平均天数差异。如果可以使用它按日期过滤它。仅显示可能在特定日期订购的客户。
【问题讨论】:
标签: mysql