我有一个有2列的数据库。
PostTown | PostCode
我有每个PostTown有100个独特的PostTown我有数千个PostCode
我想做的是说:
select distinct(PostTown), first(PostCode) from PostData
所以我只想要PostTown的第一个PostCode,非常感谢任何帮助。
答案 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)
这是一个奇怪的构造,我不知道它的效率如何,但是当我每个产品有多个图像需要处理时,它给我一个可靠的主图像。