【问题标题】:TOP N problem with GROUP BY clauseGROUP BY 子句的 TOP N 问题
【发布时间】:2010-10-19 22:56:39
【问题描述】:

问题:我需要找到所有活动的 [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

这为我提供了与给定 [GiftPledge] 关联的三个最新 [GiftDetails]。问题是我不知道如何对第二个查询求和并将其作为第一个查询中 WHERE 子句的一部分。

我发现 this article 是关于“每个组的前 n 个”的,并且 似乎 是我需要前进的方向,但我不确定我是否走在正确的轨道上。 p>

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

【问题讨论】:

    标签: tsql select group-by greatest-n-per-group


    【解决方案1】:
    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
    

    反正就是这样。

    【讨论】:

      猜你喜欢
      • 2021-11-13
      • 2018-09-07
      • 1970-01-01
      • 1970-01-01
      • 2016-01-10
      • 2011-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多