2013-03-20 3 views
0

У меня есть БД, которая имеет 2 столбца.SQL-запрос выбрать строку для многих полей

PostTown | PostCode 

У меня есть 100 уникальный PostTown для каждого PostTown у меня есть тысячи Postcode

То, что я хочу сделать, это сказать:

select distinct(PostTown), first(PostCode) from PostData 

Так что я просто хочу первый Postcode для PostTown, Буду признателен за любую оказанную помощь.

+0

Какие РСУБД? И в первую очередь - по каким критериям? – sgeddes

ответ

2

Вы не определяете «первого», но здесь хороший подход:

select postTown, min(PostCode) 
from PostData 
group by postTown 
1

Не имея поля к порядку, я не уверен, что вы можете гарантировать получение первой записи. Вы могли бы попробовать что-то вроде этого, используя row_number:

SQL Server/Oracle:

select 
    PostTown, 
    PostCode 
from 
    (
    select 
     PostTown, 
     PostCode, 
     Row_Number() OVER (Partition By PostTown ORDER BY (SELECT 1)) rn 
    from PostData 
    ) t 
where rn = 1 

MySQL:

select 
    PostTown, 
    PostCode 
from 
    (
    select 
     @rn:=IF(@PrevPostTown=PostTown,@rn+1,1) rn, 
     PostTown, 
     PostCode, 
     @PrevPostTown:=PostTown 
    from PostData 
    order by PostTown 
    ) t 
where rn = 1 

@GordonLinoff обеспечивает отличный способ, чтобы получить минимальный Postcode, а также.

0

Если вам действительно нужен первый Postcode от каждого PostTown, и у вас есть столбец ID автоинкрементный, попробуйте следующее:

SELECT 
    PostTown, 
    PostCode, 
FROM SomeTable sta 
WHERE sta.id = (SELECT MIN(id) from SomeTable WHERE PostTown = sta.PostTown) 

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

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