繁体   English   中英

如何计算日期列的移动平均 DAYS

[英]How to calculate moving average DAYS of a date column

我有这些列和数据示例数据:

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

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

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

我已经尝试过 datediff() 但我无法通过 function 来实现这个结果。

无法为最近的 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM