2列のDBがあります。
PostTown | PostCode
何千もの PostCode があるすべての PostTown に対して 100 の固有の PostTown があります
私がやりたいことは次のとおりです。
select distinct(PostTown), first(PostCode) from PostData
したがって、PostTown の最初の PostCode が必要なだけです。どんな助けも大歓迎です。
2列のDBがあります。
PostTown | PostCode
何千もの PostCode があるすべての PostTown に対して 100 の固有の PostTown があります
私がやりたいことは次のとおりです。
select distinct(PostTown), first(PostCode) from PostData
したがって、PostTown の最初の PostCode が必要なだけです。どんな助けも大歓迎です。
「最初」を定義しませんが、ここに良いアプローチがあります:
select postTown, min(PostCode)
from PostData
group by postTown
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は、常に最小郵便番号も取得するための優れた方法を提供します。
各 PostTown からの最初の PostCode が本当に必要で、自動インクリメント id 列がある場合は、これを試してください。
SELECT
PostTown,
PostCode,
FROM SomeTable sta
WHERE sta.id = (SELECT MIN(id) from SomeTable WHERE PostTown = sta.PostTown)
これは奇妙な構成であり、どれほど効率的かはわかりませんが、製品ごとに複数のイメージを処理する必要がある場合に、信頼できるプライマリ イメージが得られました。