Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何计算日期列的移动平均天数_Mysql - Fatal编程技术网

Mysql 如何计算日期列的移动平均天数

Mysql 如何计算日期列的移动平均天数,mysql,Mysql,我有这些列和数据 样本数据: 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

我有这些列和数据 样本数据:

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:

从这些数据中,我想找出每个客户最后3行的日期差异。 一个示例输出是:

customerid, last 3 orders average days between orders,sum of orderqty for last 3 order
1, 2,835
2, 2,3783

我已经尝试了datediff,但我无法通过该函数实现此结果。

无法为最近3个订单想出更好的技巧。这是可行的,但可能对大型表的性能不好:

SELECT o3.customerid,DATEDIFF(Latest1,IFNULL(Latest3,Latest2))/IF(Latest3 IS NULL,1,2) AS avgDiff,SUM(oQ.orderqty) AS qty3orders FROM
(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

我认为结果示例与您提供的数据不匹配?还是这样?我们应该按照您呈现的数据顺序,还是做更明智的事情,按日期进行排序?排序其实并不重要,因为按客户分组。但是,如果最新订购的客户可以按升序列出,这是一个加号。该示例与数据相匹配。平均订购天数意味着什么?@草莓我添加了sqlfiddle。希望它能帮助显示,在速度明显减慢之前,桌子必须是大的吗?我在我的实际桌子上试过,有超过100000行,效果很好,所以它不是戏剧性的。当然,customerid上必须有一个索引。因为customerid是一个外键列,所以索引是自动创建的吗?我不确定,但您可以试试。您的表有多大?