首页 > 解决方案 > 组的第二个和第三个日期时间的平均时间差异

问题描述

我需要找到客户的第二个订单和第三个订单之间的平均天数

我知道我需要使用,timestampdiff但是对于如何选择第二个和第三个日期并需要某种嵌套感到很茫然。

SELECT CustomerID, 
       OrderDate, 
       diff, 
       avg(timestampdiff(day, start_date, end_date)) AS average_days 
    FROM () o3
   WHERE date3, date2
ORDER BY CustomerID, OrderDate;

桌子

在此处输入图像描述

标签: mysqlsql

解决方案


为了达到您想要的结果,您首先需要根据您的数据 PARTITION BY CustmerId 计算 ROW_NUMBER。然后仅使用 RowNumber IN (2,3) 保留行,然后在两天之间获取 DateDiff。以下查询将有助于获得您想要的结果 -

SELECT CustomerID,datediff(MAX(OrderDate),MIN(OrderDate)) 
FROM
(   
    SELECT *,
    @row_num :=IF(@prev_value = concat_ws('',CsutomerID),@row_num+1,1)AS RowNumber
    , @prev_value := concat_ws('',CsutomerID)
    FROM your_table A
    ORDER BY CustomerID,OrderDate
)B
WHERE B.RowNumber IN (2,3)
GROUP BY CustomerID;

推荐阅读