【问题标题】:Select row with Distinct max(column value)选择具有不同最大值的行(列值)
【发布时间】:2017-09-07 06:48:57
【问题描述】:

[ExactReplica].[FilteredOpportunityProduct] 表

Opportunityid      baseamount
1                  500
1                  500
2                  600
2                  700

[ExactReplica].FilteredOpportunity 表

Opportunityid   name
1                ABC
2                CDF

我想取最大的baseamount;但是,当存在重复的基本金额时,我面临问题,我怎样才能只记录一条记录

我的查询

  select
     MaxAmount.[baseamount] ,
     c.name


 FROM [ExactReplica].FilteredOpportunity c

 Left JOIN
        (
            SELECT  opportunityid,
                    MAX((baseamount)) baseamount
            FROM    [ExactReplica].[FilteredOpportunityProduct] 
            GROUP BY   opportunityid

        ) MaxAmount ON c.opportunityid = MaxAmount.opportunityid
    inner JOIN
        [ExactReplica].[FilteredOpportunityProduct]  p ON   MaxAmount.opportunityid = p.opportunityid
                    AND MaxAmount.baseamount = p.baseamount

【问题讨论】:

  • 请查看此链接以了解有关如何改进问题的更多信息:spaghettidba.com/2015/04/24/…
  • 您的预期结果是什么?
  • 1. inner join 在你的例子中是多余的 2. 你不喜欢你的请求吗?

标签: sql-server sql-server-2012 ssms-2012


【解决方案1】:

试试这个:

select max(baseamount) baseamount,a.name
from
(select
     baseamount, ROW_NUMBER() over (partition by p.opportunityid,baseamount order by p.baseamount desc) rn,
     c.name

 FROM FilteredOpportunity c
    inner JOIN
        [FilteredOpportunityProduct]  p ON   c.opportunityid = p.opportunityid) a
        where rn=1
        group by a.name

输出:

baseamount  name
500         ABC
700         CDF

【讨论】:

    【解决方案2】:

    您可以尝试以下查询以获得预期结果吗,我已经执行了以下脚本:

    表创建:

    创建表过滤机会产品 ( 机会ID INT NULL, 基数 VARCHAR(24) NULL )

    创建表过滤机会 ( 机会ID INT NULL, 名称 VARCHAR(24) 空 )

    插入:

    插入过滤的机会产品(机会 ID、基数)值 (1,500),(1,500),(2,600),(2,700)

    插入过滤的机会(机会 ID,名称)值 (1,'ABC'),(2,'CDF')

    选择:

    选择 A.OPPORTUNITYID,B.NAME,MAX(BASEAMOUNT) 作为 BASEAMOUNT FROM FILTEREDOPPORTUNITYPRODUCT AS A
    以 B 身份加入过滤的机会
    在 A.OPPORTUNITYID = B.OPPORTUNITYID 按 A.OPPORTUNITYID、B.NAME 分组

    【讨论】:

      猜你喜欢
      • 2013-08-15
      • 2021-07-23
      • 2011-02-20
      • 2018-12-16
      • 1970-01-01
      • 2014-12-08
      • 1970-01-01
      • 2021-08-10
      相关资源
      最近更新 更多