2016-08-16 11 views
0

オーダー間の平均日数を返すアクセスでクエリを作成したいとします。 テーブルの構造は次のとおりです。 テーブル名:アクセス - オーダー間の平均日数の計算方法(カーソルなし)

Orders 

テーブル列:テーブルへの単純なクエリは、これを返します

idOrder (integer) 
idClient (integer) 
OrderDate (date in format dd/mm/yyyy) 
OrderAmount (money) 

:この中

1 1131 01/01/2015 $235 
2 1145 02/01/2015 $11 
3 1131 03/01/2015 $256 
4 1131 04/01/2015 $300 
5 1146 05/01/2015 $25 
6 1145 10/01/2015 $15 
7 1145 20/01/2015 $4 
8 1131 21/01/2015 $45 

例:

client 1131 has orders on the days: 01/01/2015; 03/01/2015; 04/01/2015; 21/01/2015 
client 1145 has orders on the days: 02/01/2015; 10/01/2015; 20/01/2015 
client 1146 has orders on days: 05/01/2015 

私は、各クライアントの注文の間の平均日数を返すクエリを作成したいと思います:

1131 5 
1145 6 
1146 null 

それはSQL Serverのだろうならば、私はカーソルを使用しますが、Accessで、私は知りませんどうやってするの。

助けが必要ですか?

+0

をレコードセットです。 – Andre

答えて

2

SQL Serverではカーソルは必要ありません。 これは、次のクエリを試してみてください。 顧客が1発注した場合、結果は論理的に0(ゼロ)で、nullではありません。 Nullは、注文をしなかった顧客を反映する必要があります。

SELECT Orders.idClient, (Max(Orders.OrderDate)-Min(Orders.OrderDate))/Count(*) AS [Days between orders] 
FROM Orders 
GROUP BY Orders.idClient 
+0

ルネありがとう、それはうまく動作しているようです。だから、マジックは 'max(orders.date) - min(orders.date)/ count(*)'を実行し、** client **でグループ化しています。私は正しい? –

1

このようなクエリを作成:アクセスVBAでやや同等、参考のため

Select 
    idClient, 
    Avg(DaysPast) As AverageOrderDays 
From  
    (Select 
     idClient, 
     DateDiff("d", 
       (Select Max(T.[Purchase Week]) 
       From Orders As T 
       Where T.idClient=Orders.idClient 
       And T.[Purchase Week] < Orders.[Purchase Week]), 
      [Purchase Week]) AS DaysPast 
    From 
     Orders) As OrderDays 
Group By 
    idClient