4

あちこち検索しましたが、各顧客の注文間の平均時間を計算する方法が見つからないようです。私はOracle SQL Developerを使用しています。私は喜んでラグ()関数を使ってみました。

以下のデータ例は、顧客が 3 回別々に購入したことを示しています。すべての購入間の平均時間は 7.5 日 ((6+9)/2) です。

CustID   OrderDate 
-------  ---------
1000000  14-AUG-12
1000000  23-AUG-12
1000000  29-AUG-12

では、各顧客の平均をどのように計算すればよいでしょうか?

どんな助けでも大歓迎です。

4

4 に答える 4

6

平均値のみが必要な場合は、ウィンドウ関数を使用しない単純なクエリで、最小日付と最大日付を調べてから、注文間のギャップの数を調べることができると思います。

SELECT CustID, (MAX(OrderDate) - MIN(OrderDate)) / (COUNT(*) - 1)
  FROM Orders
 GROUP BY CustID
HAVING COUNT(*) > 1
于 2013-04-30T14:03:00.253 に答える
5

ここで重要なのはラグ分析関数です

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 )
于 2013-04-30T13:16:14.770 に答える
5

分析関数は間違いなく答えですが、クエリは次の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
于 2013-04-30T13:22:30.527 に答える