假设我有一张客户地址表:

CName           |   AddressLine
-------------------------------
John Smith      | 123 Nowheresville
Jane Doe        | 456 Evergreen Terrace
John Smith      | 999 Somewhereelse
Joe Bloggs      | 1 Second Ave

在表中,像John Smith这样的一位客户可以有多个地址。
我需要此表的选择查询,以仅返回在“CName”中存在重复项的情况下找到的第一行。对于此表,它应该返回除第3个(或第1个-这两个地址中的任何一个都可以,但只能返回一个)之外的所有行。
是否可以根据服务器是否之前已经查看过列值将关键字添加到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/

10-11 10:41