2016-08-16 82 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

作为参考,在Access VBA有点相当于是一个记录。 – Andre

回答

2

你不需要SQL Server中的游标。 话虽如此,请尝试下面的查询。 如果客户下了一个订单,逻辑上结果应该是0(零),而不是空。 空值应反映任何没有任何订单的客户。

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

谢谢Rene,它似乎工作正常。所以,神奇的是在执行'max(orders.date) - min(orders.date)/ count(*)'并且通过** client **进行分组;我对吗? –

1

建立这样的查询:

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