SQL:只选择一行具有相同值的表

新手上路,请多包涵

我对 sql 有点陌生,对于我的项目,我需要做一些数据库排序和过滤:

假设我的数据库如下所示:

 ==========================================
|  id       |       email        | name
==========================================
|   1       |  123@test.com      | John
|   2       |  234@test.com      | Peter
|   3       |  234@test.com      | Steward
|   4       |  123@test.com      | Ethan
|   5       |  542@test.com      | Bob
|   6       |  123@test.com      | Patrick
==========================================

我应该怎么做才能只返回具有相同电子邮件的最后一列:

 ==========================================
|  id       |       email        | name
==========================================
|   3       |  234@test.com      | Steward
|   5       |  542@test.com      | Bob
|   6       |  123@test.com      | Patrick
==========================================

提前致谢!

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

阅读 689
2 个回答

SQL查询:

     SELECT * FROM test.test1  WHERE id IN (
  SELECT MAX(id) FROM test.test1 GROUP BY email
);

您的示例数据集查询结果

希望这能解决您的问题。谢谢。

原文由 Saibal Roy 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以使用以下查询来获取 MAX id 每个 email --- 的值:

 SELECT email, MAX(id)
FROM mytable
GROUP BY email

使用上述查询作为派生表,您可以获得整个记录:

 SELECT t1.*
FROM mytable AS t1
JOIN (
  SELECT email, MAX(id) AS id
  FROM mytable
  GROUP BY email
) AS t2 ON t1.id = t2.id

原文由 Giorgos Betsos 发布,翻译遵循 CC BY-SA 3.0 许可协议

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