我已经搜索了所有但似乎无法找到如何计算每个客户的订单之间的平均时间。我正在使用Oracle SQL Developer。我已经尝试过使用lag()函数而没有任何快乐。
以下示例数据显示了客户在3个不同场合购买的产品。所有购买之间的平均时间为7.5天((6 + 9)/ 2)。
CustID OrderDate
------- ---------
1000000 14-AUG-12
1000000 23-AUG-12
1000000 29-AUG-12
那么我如何计算每个客户的平均值?
任何帮助都会非常感激。
答案 0 :(得分:5)
如果只需要平均值,那么我认为你可以通过查看最小和最大日期,然后通过订单之间的间隙数量潜水来完成没有窗口函数的简单查询:
SELECT CustID, (MAX(OrderDate) - MIN(OrderDate)) / (COUNT(*) - 1)
FROM Orders
GROUP BY CustID
HAVING COUNT(*) > 1
答案 1 :(得分:4)
LAG
分析函数绝对是答案,但查询应该更像这样:
SELECT CustID, AVG(OrderDate - PriorDate)
FROM (
SELECT
CustID,
OrderDate,
LAG(OrderDate) OVER (PARTITION BY CustID ORDER BY OrderDate) as PriorDate
FROM Orders)
GROUP BY CustID
答案 2 :(得分:3)
这里的关键是lag分析函数
select cust_id , avg(orderdate - lag_orderdate) as avg_time_between_orders
from (
select cust_id , orderDate , lag(orderdate) over (partition by cust_id) as lag_orderdate
from orders )
答案 3 :(得分:0)
使用Ed的答案作为起点,使用CTE获得所有订单的平均值。
WITH Sales_CTE (CustomerId, OrderDays, OrderCount)
AS
(
SELECT CustomerId, (datediff(day,Min(OrderTime),Max(OrderTime))) / (COUNT(*) - 1) AS OrderDays, COUNT(*) AS OrderCount
FROM tblStoreOrders GROUP BY CustomerId HAVING COUNT(*) > 1
)
SELECT Avg(OrderDays) FROM Sales_CTE