0

我有一个有 2 列的数据库。

PostTown | PostCode

每个 PostTown 我都有 100 个独特的 PostTown 我有数千个 PostCode

我想做的是说:

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/甲骨文:

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 回答