2

问题:我需要找到最后三个 [GiftDetails] 的所有活动 [GiftPledges] 的数量为零。

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

现在,我的所有 [GiftPledges] 至少包含三个 [GiftDetails]。

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 子句的一部分。

我发现了这篇关于“每组前 n 名”的文章,这似乎是我需要前进的方向,但我不确定我是否走在正确的轨道上。

任何帮助、澄清或建议将不胜感激。

4

1 回答 1

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

反正是这样的。

于 2009-04-16T20:04:00.387 回答