mysql - 组的第二个和第三个日期时间的平均时间差异
问题描述
我需要找到客户的第二个订单和第三个订单之间的平均天数
我知道我需要使用,timestampdiff
但是对于如何选择第二个和第三个日期并需要某种嵌套感到很茫然。
SELECT CustomerID,
OrderDate,
diff,
avg(timestampdiff(day, start_date, end_date)) AS average_days
FROM () o3
WHERE date3, date2
ORDER BY CustomerID, OrderDate;
桌子
解决方案
为了达到您想要的结果,您首先需要根据您的数据 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;
推荐阅读
- json - 如何使用 JSON ref 合并多个列表?
- haproxy - HAProxy 仅侦听特定端口问题
- python - 为什么我的颜色图/颜色条与我尝试显示的内容不匹配?
- c++ - SDL2 PointInRect If 语句不起作用
- amazon-web-services - 如何从 s3 对象中删除所有者?
- sql - 使用 SQL 将 Oracle 的 RAW(16) 转换为 .NET 的 GUID
- bash - Shell / Bash - 分配cli结果后字符串变量中的额外字符
- c# - FluentAssertions 等价比较行为和 IMemberInfo
- c# - Blazor WASM 项目的 dotnet 发布错误,已添加具有相同密钥的项目
- java - 使用spring WebFlux,我怎样才能得到所有的RequestHandlerMappings?