Top N Проблема с группой по пункту
-
09-09-2019 - |
Вопрос
Проблема: мне нужно найти все активные [Giftpledges], которые имеют последние три [diftdetails], имеют нулевое количество.
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], у которых есть как минимум три [подарочные дневные хвост].
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]. Проблема в том, что я не знаю, как суммировать второй запрос, и он станет частью предложения о том, где в первом запросе.
я нашел эта статья о «топ -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
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
В любом случае что -то подобное.
Не связан с StackOverflow