2

問題: 最後の 3 つの [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

これで、少なくとも 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] に関連付けられた最新の 3 つの [GiftDetails] が得られます。問題は、2 番目のクエリを合計して最初のクエリの WHERE 句の一部にする方法がわからないことです。

「Top n per Group」に関するこの記事を見つけました。それは私が向かう必要がある方向のように思えますが、正しい軌道に乗っているかどうかはわかりません。

ヘルプ、説明、または提案をいただければ幸いです。

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 に答える