2016-12-26 23 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 
輸入表
相關問題