假设我有一个客户地址表:
+-----------------------+------------------------+
| CName | AddressLine |
+-----------------------+------------------------+
| John Smith | 123 Nowheresville |
| Jane Doe | 456 Evergreen Terrace |
| John Smith | 999 Somewhereelse |
| Joe Bloggs | 1 Second Ave |
+-----------------------+------------------------+
在表中,像 John Smith 这样的一个客户可以拥有多个地址。 我需要此表的 SELECT 查询仅返回“CName”中存在重复项的第一行。对于此表,它应该返回除第三行(或第一行 - 这两个地址中的任何一个都可以,但只能返回一个)之外的所有行。
是否可以将关键字添加到 SELECT
查询中,以根据服务器之前是否已看到该列值进行过滤?
最佳答案
如果您说您不关心使用哪个地址,那么这是一个非常简单的答案。
SELECT
CName, MIN(AddressLine)
FROM
MyTable
GROUP BY
CName
如果您想要第一个根据“插入”列,那么它是一个不同的查询
SELECT
M.CName, M.AddressLine,
FROM
(
SELECT
CName, MIN(Inserted) AS First
FROM
MyTable
GROUP BY
CName
) foo
JOIN
MyTable M ON foo.CName = M.CName AND foo.First = M.Inserted
关于sql - 如何为列的每个唯一值仅选择前行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4662464/