如何只为列的每个唯一值选择第一行?

新手上路,请多包涵

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

 +-----------------------+------------------------+
|         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 查询以根据服务器之前是否已经看到该列值进行过滤?

原文由 nuit9 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 555
2 个回答

如果您说您不在乎使用哪个地址,这是一个非常简单的答案。

 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

原文由 gbn 发布,翻译遵循 CC BY-SA 2.5 许可协议

从 (SELECT DISTINCT(amount) from Orders order by amount desc limit 3) order by amount asc limit 1 中选择金额;

原文由 Gobi 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进