0

2列のDBがあります。

PostTown | PostCode

何千もの PostCode があるすべての PostTown に対して 100 の固有の PostTown があります

私がやりたいことは次のとおりです。

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

したがって、PostTown の最初の PostCode が必要なだけです。どんな助けも大歓迎です。

4

3 に答える 3

2

「最初」を定義しませんが、ここに良いアプローチがあります:

select postTown, min(PostCode)
from PostData
group by postTown
于 2013-03-20T01:11:13.887 に答える
1

Order Byのフィールドがないと、最初のレコードを確実に取得できるかどうかわかりません。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は、常に最小郵便番号も取得するための優れた方法を提供します。

于 2013-03-20T01:20:24.900 に答える
0

各 PostTown からの最初の PostCode が本当に必要で、自動インクリメント id 列がある場合は、これを試してください。

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

これは奇妙な構成であり、どれほど効率的かはわかりませんが、製品ごとに複数のイメージを処理する必要がある場合に、信頼できるプライマリ イメージが得られました。

于 2013-03-20T01:32:20.377 に答える