SQL查询为许多字段选择行

时间:2013-03-20 01:10:08

标签: sql

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

PostTown | PostCode

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

我想做的是说:

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

所以我只想要PostTown的第一个PostCode,非常感谢任何帮助。

3 个答案:

答案 0 :(得分:2)

你没有定义“第一”,但这是一个很好的方法:

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

答案 1 :(得分: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的好方法。

答案 2 :(得分:0)

如果你真的需要每个PostTown的第一个PostCode,并且你有一个自动递增的id列,试试这个:

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

这是一个奇怪的构造,我不知道它的效率如何,但是当我每个产品有多个图像需要处理时,它给我一个可靠的主图像。