2014-03-06 26 views
0

我试图平均过去3个完整驱动器的4列的结果。如果我没有通过FromDateTime desc订购,我会获得该帐户的最早驱动器。这不是我所需要的。按顺序使用AVG

但是当我尝试拉的平均4列,我得到这个消息: 列“rpt_DriveMaster.FromDateTime”,因为它不是在聚合函数或包含在ORDER BY子句无效GROUP BY子句。

有人可以帮助我了解如何正确编写此查询吗?我应该看一下子查询吗?只是不确定。

SELECT top 3 
AVG(ProcedureProjection), 
AVG(ProceduresPerformed), 
AVG(DPaCT.ProductProjection), 
AVG(DPaCT.ProductsCollected) 
/*DM.DriveID, DM.FromDateTime, DM.AccountID, Acct.Name, DPaCT.ProcedureProjection, 
DPaCT.ProductProjection, DPaCT.ProceduresPerformed, DPaCT.ProductsCollected*/ 
FROM rpt_DriveMaster DM 
INNER JOIN DriveProjectionandCollectedTotals DPaCT ON DM.DriveID = DPaCT.DriveID 
INNER JOIN rpt_Accounts Acct ON DM.AccountID = Acct.AccountID 
where Acct.accountid='17845' and DM.fromdatetime < '2014-04-01' and DM.StatusID='2' 
Order by DM.FromDateTime; 
+0

*从您的问题的编辑*您不能通过查询没有返回的东西命令。按日期时间分组,然后您可以通过它订购。 – Bobby

回答

0

top 3意味着你将返回当前的结果最多3行。如果您需要计算3行的平均值,首先需要对它们进行过滤。我会使用子查询:

SELECT 
    AVG(ProcedureProjection), 
    AVG(ProceduresPerformed), 
    AVG(DPaCT.ProductProjection), 
    AVG(DPaCT.ProductsCollected) 
FROM 
    (
     SELECT TOP 3 ProcedureProjection, ProceduresPerformed, DPaCT.ProductProjection, DPaCT.ProductsCollected 
     FROM rpt_DriveMaster DM 
     INNER JOIN DriveProjectionandCollectedTotals DPaCT ON DM.DriveID = DPaCT.DriveID 
     INNER JOIN rpt_Accounts Acct ON DM.AccountID = Acct.AccountID 
     where Acct.accountid='17845' and DM.fromdatetime < '2014-04-01' and DM.StatusID='2' 
    ) as a