mysql - 如何使用 SQL 仅选择每个组中最新的一个?

标签 mysql sql greatest-n-per-group

我有下表:

TABLE sales
| id | name | date       | amount |
|----|------|------------|--------|
|  1 | Mike | 2016-12-05 |  67.15 |
|  2 | Mike | 2016-12-09 |  98.24 |
|  3 | John | 2016-12-12 |  12.98 |
|  4 | Mike | 2016-12-19 |  78.48 |
|  5 | Will | 2016-12-19 | 175.26 |
|  6 | John | 2016-12-22 |  14.26 |
|  7 | John | 2016-12-23 |  13.48 |

我正在尝试创建一个 View ,该 View 将按名称列分组并仅返回最近发送的金额。它应该看起来像这样:

TABLE sales_view
| id | name | date       | amount |
|----|------|------------|--------|
|  4 | Mike | 2016-12-19 |  78.48 |
|  5 | Will | 2016-12-19 | 175.26 |
|  7 | John | 2016-12-23 |  13.48 |

我不知道如何去做这个。我想我需要子查询,但我知道如果你尝试在 View 中使用它们,SQL 会生气。

最佳答案

您可以使用元组和带有 group by 的子查询来获取 max(date)

 select * from sales
 where (name, date) in ( select name, max(date) 
                         from sales 
                         group by name)

关于mysql - 如何使用 SQL 仅选择每个组中最新的一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41795738/

相关文章:

mysql连接表,根据时间戳比较仅返回行

php - MySQL 正则表达式在 php 脚本中失败

sql - 我可以使用什么SQL查询来获取基于某一列的每组的第一条记录?

php - MySQL 查询 - 添加列和行

SQL INSERT(选择)使用基于另一列值的 CASE

Mysql为每个组[用户]选择最近的2条记录

mysql - 获取每个帖子的最后三个用户的所有操作

python - 如何从 python 在 mysql 中创建存储过程?

php - $_SERVER ['REMOTE_ADDR' ] 返回假 IP

SQL 探查器和调优顾问