Проблема TOP N с предложением GROUP BY - PullRequest
2 голосов
/ 16 апреля 2009

Проблема: мне нужно найти все активные [GiftPledges] с последними тремя [GiftDetails] нулевой суммой.

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

Это дает мне три последних [GiftDetails], связанных с данным [GiftPledge]. Проблема в том, что я не знаю, как суммировать второй запрос и сделать его частью предложения WHERE в первом запросе.

Я нашел эту статью о "Top n per Group" и что кажется как направление, в котором мне нужно идти, но я не уверен, что я нахожусь справа трек.

Любая помощь, разъяснения или предложения будут с благодарностью.

1 Ответ

2 голосов
/ 17 апреля 2009
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

как-то так.

...