2009-04-16 88 views
2

問題:我需要找到所有有效的[GiftPledges],其中最後三個[GiftDetails]的金額爲零。GROUP BY子句的TOP N問題

SELECT gp.PledgeId FROM GiftPledge gp 
     INNER JOIN GiftDetail gd ON gp.PledgeId = gd.PledgeId 
     WHERE gp.PledgeStatus = 'A' 
     GROUP BY PledgeId 
     HAVING COUNT(PledgeId) >= 3 

現在,我擁有至少三個[GiftDetails]的所有[GiftPledges]。

SELECT TOP 3 gdi.Amt FROM GiftDetail gdi 
     INNER JOIN GiftHeader ghi ON gdi.GiftRef = ghi.GiftRef 
     WHERE gdi.PledgeId = gp.PledgeId 
     ORDER BY ghi.GDate DESC 

這給出了與給定的[GiftPledge]關聯的三個最近的[GiftDetails]。問題是我不知道如何總結第二個查詢,並將它作爲第一個查詢中的WHERE子句的一部分。

我發現this article關於「Top n per Group」和似乎像我需要領導的方向,但我不確定我是否在正確的軌道上。

任何幫助,澄清或建議將不勝感激。

回答

2
SELECT gp.PledgeId FROM GiftPledge gp 
     INNER JOIN GiftDetail gd ON gp.PledgeId = gd.PledgeId 
     WHERE gp.PledgeStatus = 'A' 
     GROUP BY PledgeId 
     HAVING COUNT(PledgeId) >= 3 
AND 
GP.PledgeID in (
SELECT PledgeID From 
(
SELECT TOP 3 gp.PledgeID, gdi.Amt FROM GiftDetail gdi 
     INNER JOIN GiftHeader ghi ON gdi.GiftRef = ghi.GiftRef 
     WHERE gdi.PledgeId = gp.PledgeId 
     ORDER BY ghi.GDate DESC 
) x_amt 
Group By PledgeID 
Having SUM(AMT)) x_sum = 0 

不管怎麼樣。