2015-10-28 3 views
0

Я не уверен, как задать этот вопрос ... но здесь он идет.SQL-запрос для возврата только первого значения одного значения столбца

У меня есть таблица под названием lists, который имеет четыре колонны, id, name, type и group. Значения столбцов type не уникальны и являются текстовым столбцом. Мне нужен запрос для возврата id и type из таблицы lists, но мне нужен только один из type. Он также должен быть в алфавитном порядке. Это может быть первое появление каждого типа.

В postgreSQL 9.4.5 Я пробовал select distinct list_type, id from lists order by list_type;, но это, конечно, возвращает повторяющиеся типы, которые имеют уникальные идентификаторы.

Мне нужно только первое появление каждого type и что id.

Некоторые образцы данных:


        id     |   type    
--------------------------------------+-------------------------------- 
0014dea9-f73f-46d0-bf7d-d52717029582 | invest_fees 
004665b5-4657-4cbc-8534-1aa9e4ef305f | invest_fees 
00910f6c-bdf0-4991-ac0c-969b3b9c6b84 | invest_fees 
009ed283-531b-4d7b-b51d-0c0e0e7a5707 | countries 
00b4f8e2-ae47-4083-ae6e-8d6dbaa2cd63 | invest_fees 
00ca1972-cf70-4fa2-bfde-bc89fce19433 | invest_fees 
00feb6a2-4ee7-4e31-8780-cb5938587669 | countries 
010777bc-7e74-4c13-8808-4c35cfdbf988 | pick_banks 
01852693-7560-4de5-a534-0519e7c04c51 | countries 
01bee5a4-23f7-427d-9b84-4c707154a812 | countries 
01bf29f9-70af-4b3c-b7f9-d01e0f0f142c | invest_fees 
01d51fe3-4c32-4d21-b38c-8e84a92ff0aa | invest_fees 
01d981dd-13d4-4098-a7e3-bd1bb5f02f2b | countries 
01de77bb-ff82-4c3c-b26f-f3829d84dd29 | invest_fees 
01df6e6c-9a77-4b83-a825-09949768df54 | countries 
01f11d01-f490-48a9-b21c-803f7c03f5f6 | invest_mtos 

ответ

2

Вы можете использовать функцию row_number, чтобы получить один id (упорядоченный по возрастанию) за type.

select id, type from 
(
select id, name, type, "group", 
row_number() over(partition by type order by type) as rn 
from lists 
) t 
where rn = 1 
+0

Благодаря ВКП, но я все еще получаю повторяющиеся типы. .. У них есть уникальные идентификаторы. Листинг первого появления этого типа более важно, чем перечисление уникальных идентификаторов. Все мои идентификаторы уникальны, но меня не интересует листинг всех идентификаторов и их типов. – Jason

+0

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

+0

посмотрите, работает ли отредактированная версия –

0
select min(id) as id, list_type 
from lists 
group by list_type 
order by list_type 
0

Вы хотите один результирующий ряд каждого типа. Это переводит в GROUP BY type в SQL.

Тогда вы говорите, что все равно, какой из его идентификаторов вы получите по типу, поэтому используйте MIN или MAX, это не имеет значения:

select list_type, min(id) as one_of_its_ids 
from lists 
group by list_type 
order by list_type; 
+0

О, я не видел ответа Клодоалдо Нето, когда писал. Вы заметили, что это тот же самый ответ. Ответ vkp делает примерно то же самое с той разницей, что больше работы выполняется, а полученный идентификатор более случайный. Вы бы использовали такой тип запроса, когда требовалось ранжирование, или вам нужно больше столбцов из одной записи. В противном случае идите с ответом Клодоальдо Нето; это прямой путь к заданной проблеме. –