2015-03-24 2 views
0

У меня есть эти значения в моей SQL таблице:получить только один элемент из подгруппы значений

A Column | B Column | C Column 
------------------------------ 
11  | Text1 | 10 
11  | Text2 | 20 
11  | Text3 | 30 
12  | Text4 | 20 
12  | Text5 | 15 
12  | Text9 | 12 
13  | Text60 | 01 
13  | Text99 | 05 
13  | Text33 | 09 
13  | Text0 | 04 

И я хотел бы получить только линии в каждой подгруппе, ограниченной «колонка», где у меня есть самое высокое значение в столбце «C». Например: я получаю:

A Column | B Column | C Column 
------------------------------ 
11  | Text3 | 30 
12  | Text4 | 20 
13  | Text33 | 09 

Не мог бы кто-нибудь мне помочь? Я все еще узнаю о sql.

Спасибо!

+1

Какой РСУБД это для? Добавьте тег, чтобы указать, используете ли вы 'mysql',' postgresql', 'sql-server',' oracle' или 'db2' - или что-то еще. –

+0

Да .. Это основной вопрос :) – Avidan

+0

Извините ... Я использую MS Access 2010. –

ответ

1

как вы не указали систему RDBMS, так что я хочу предоставить запрос, который работает почти все РСУБД, который поддерживает SQL (используйте self join с group by, как показано ниже):

select tb2.id,tb1.b,tb1.c from 
(select t1.b,max(t1.c) c from table_name t1 group by tb1.b) tb1 
join table_name tb2 on tb1.b=tb2.b and tb1.c=tb2.c 
+0

В вашем запросе вы использовали две таблицы, но я работаю только с одним. Почему вы используете два? –

+1

запрос использует только одну таблицу, снова просмотрите ее – jfun

+1

Теперь я понял! Спасибо за помощь! Работает отлично! –

1

Вы можете сделать это, как показано ниже в T-SQL, MS SQL Server:

;WITH cte AS 
(
    SELECT *, 
     ROW_NUMBER() OVER (PARTITION BY A_Column ORDER BY C_Column DESC) AS rn 
    FROM table_name 
) 
SELECT * 
FROM cte 
WHERE rn = 1 

Вы можете найти аналогичный пример здесь: Get top 1 row of each group

Смежные вопросы