2011-01-03 5 views
1

Если у меня есть результирующий набор, какSQL группа по идентификатору

ID1  ID2 
43918 804 
43917 804 
44047 805 
44046 805 
44045 805 
44044 805 
44048 805 
45172 806 
44298 807 
44296 808 
44297 808 
44294 808 
44295 808 
44331 809 
44330 809 
44334 809 
44333 809 
44332 809 
44323 810 

Как я могу ограничить его в наборе результатов, как

ID1  ID2 
43918 804 
44047 805 
45172 806 
44298 807 
44296 808 
44331 809 
44323 810 

В основном один ID1 для каждого уникального ID2. Столбцы из одной таблицы.

select ID1,ID2 
from table 
where ID2 in (804, 805, 806, 807, 808, 809, 810); 
+0

Для каждого уникального ID2, какого ID1 вы хотите? –

+0

Вы хотите получить первую строку каждой группы? И какой SQL-сервер вы используете? Хотя SQL является общим, для некоторых операторов разные для разных серверов. –

ответ

9
select max(id1), id2 
from table 
group by id2 

Я предполагаю, что вы хотите, макс. Ключевым моментом является то, что вы хотите сделать группировку по столбцу id2 и выполнить какую-то агрегатной функции на id1 (мин, макс, сумма, ср)

+0

Отлично. Благодарю. Я не указал в вопросе, нужен ли мне min или max, и в этом случае это не имеет большого значения. Мне просто нужна одна строка, возвращаемая для каждого уникального ID2. – BourneAgain

4
SELECT MIN(ID1), ID2 FROM Table GROUP BY ID2 

Это дает результат установить использованный в качестве пример - самый низкий ID1 для каждого ID2. Вы можете использовать другие функции вместо MIN для получения других интересных значений по значению ID2, точный список функций зависит от продукта базы данных.

+0

44044 <44047, поэтому ОП не описал мин в вопросе. –

+0

Упс. , , 3 - простое, 5 - простое, 7 - простое, 9 - простое, поэтому все нечетные числа простые. –

+0

Отлично. Благодарю.
BourneAgain

0

не уверены, если это умный способ, но вы могли бы Гнездо запросов что-то вроде этого

select 
    t1.ID2, 
    (select TOP 1 id1 from table where id2 = t1.id2 from table as t2) as ID1 
from table as t1 
where ID2 in (804,805,806,807,808,809,810); 

TOP 1 является SQL Server конкретным, если вы на MySQL/Postgres вам нужно выбрать .. . LIMIT 1

+0

Если вы отправляете код или XML, ** пожалуйста ** выделите эти строки в текстовом редакторе и нажмите кнопку «образцы кода» ({}) на панели инструментов редактора, чтобы красиво отформатировать и выделить синтаксис! –

0

Используя группу, а затем агрегатной функции на колонке ID1

SELECT MAX(ID1) AS ID1, ID2 
FROM TABLE 
GROUP BY ID2 

Это даст вам наибольшее значение ID1, связанное с ID2

+0

Если вы отправляете код или XML, ** пожалуйста ** выделите эти строки в текстовом редакторе и нажмите кнопку «образцы кода» ({}) на панели инструментов редактора, чтобы красиво отформатировать и выделить синтаксис! –

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