2016-12-26 35 views
1

例如,我创建一个表约人contribue 2个活动如何从每个组找到最大值,并显示其信息使用“分组依据”

+-------------------------------------+ 
| ID Name Campaign Amount (USD) | 
+-------------------------------------+ 
| 1  A   1    10 | 
| 2  B   1    5 | 
| 3  C   2    7 | 
| 4  D   2    9 | 
+-------------------------------------+ 

任务时:对于每个广告系列,找到此人谁最有助于

预期结果(姓名,ID)是

+-----------------------------------------+ 
|  Campaign   Name   ID | 
+-----------------------------------------+ 
|  1     A    1 | 
|  2     D    4 | 
+-----------------------------------------+ 

我用“组的运动”,但结果有2列“Campagin”和“最大值”当我需要“名称“和”ID“

感谢您的帮助。 编辑:我修正了一些值,真的很抱歉

+0

你的ID和活动栏,它有正确的值下面的代码? – GurV

+0

我编辑过,对不起 –

回答

3

您可以使用分析功能是:

select name, id, amount 
from (select t.*, max(amount) over (partition by campaign) as max_amount 
     from t 
    ) t 
where amount = max_amount; 
+0

所有的广告系列都有不同的价值。你的查询将如何工作? – GurV

+0

加我认为输入数据是错的 – GurV

+0

对不起,我会修复它 –

0

尝试下一个查询: -

SELECT Campaign , Name , ID 
FROM (
     SELECT Campaign , Name , ID , MAX (Amount) 
     FROM MyTable 
     GROUP BY Campaign , Name , ID 
) temp; 
+0

消息:'''附近语法不正确。 –

+0

顺便说一句,我不能通过使用“()”将语句分组,总是得到这个错误 –

+0

尝试更正的版本(缺少内部选择的别名)。 – FDavidov

1

您还可以通过给做rank/row_number partiton by campaign,并按照amount的降序排列。

查询

;with cte as(
    select [num] = dense_rank() over(
     partition by [Campaign] 
     order by [Amount] desc 
    ), * 
    from [your_table_name] 
) 
select [Campaign], [Name], [ID] 
from cte 
where [num] = 1; 
0

只需使用Where条款与量group by运动的max: -

正如下面的通用代码: -

select a, b , c 
from tablename 
where d in 
(
    select max(d) 
    from tablename 
    group by a 
) 

演示: -

Create table #MyTable (ID int , Name char(1), Campaign int , Amount int) 
go 

insert into #MyTable values (1,'A',1,10) 
insert into #MyTable values (2,'B',1,5) 
insert into #MyTable values (3,'C',2,7) 
insert into #MyTable values (4,'D',2,9) 
go 

select Campaign, Name , ID 
from #MyTable 
where Amount in 
(
    select max(Amount) 
    from #MyTable 
    group by Campaign 
) 

drop table #MyTable 

结果: -

enter image description here

+0

谢谢,它的工作 –

+0

错误您需要关联子查询。它可能会带来错误的结果 –

0

请找到相同

SELECT * 
FROM #MyTable T 
OUTER APPLY (
    SELECT COUNT(1) record 
    FROM #MyTable T1 
    where t.Campaign = t1.Campaign 
    and t.amount < t1.amount 
)E 
where E.record = 0 
输入表