簡體   English   中英

帶分組的SQL子查詢問題,平均值

[英]SQL sub-query problem with grouping, average

在MS Transact SQL中,假設我有一個像這樣的表(Orders):

 Order Date       Order Total     Customer #
 09/30/2008       8.00            1
 09/15/2008       6.00            1
 09/01/2008       9.50            1
 09/01/2008       1.45            2
 09/16/2008       4.50            2
 09/17/2008       8.75            3
 09/18/2008       2.50            3

我需要的是:對於每個客戶,最近兩個訂單的平均訂單金額。 因此對於客戶#1,我應該得到7.00(而不是7.83)。

我一直在盯着這一個小時(在一個更大的問題中,我已經解決了),我認為我的大腦已經凍結了。 幫助一個簡單的問題?

這應該成功

select avg(total), customer 
from orders o1 
where orderdate in 
  ( select top 2 date 
    from orders o2 
    where o2.customer = o1.customer 
    order by date desc )
group by customer

在SQL Server 2005中,您具有RANK函數,與分區一起使用:

USE AdventureWorks;
GO
SELECT i.ProductID, p.Name, i.LocationID, i.Quantity
    ,RANK() OVER 
    (PARTITION BY i.LocationID ORDER BY i.Quantity DESC) AS 'RANK'
FROM Production.ProductInventory i 
    INNER JOIN Production.Product p 
        ON i.ProductID = p.ProductID
ORDER BY p.Name;
GO

鏈接

一種選擇是使用游標循環遍歷所有客戶ID,然后將平均值作為多個子查詢。

但是,對於大型數據集,查詢效率不高,可能需要很長時間才能處理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM