mysql - 获取组内最新记录

标签 mysql sql

我有以下表结构

id    dateChanged    changeType    changeID

其中有以下数据

1   2014-04-01  memEdit   205
2   2014-04-01  memEdit   205
3   2014-03-31  memEdit   1
4   2014-04-01  memEdit   1
5   2014-04-01  memEdit   3

现在我想获取每个更改ID的最新记录。所以我会得到 id 为 2,4,5 的记录。 我尝试过将它们分组,但它给了我每组的第一个(所以我得到了 1,3,5)

最佳答案

1。旧的不工作查询

<罢工>

<罢工>
SELECT * FROM `your_table`
GROUP BY `changeID`
ORDER BY `id` DESC

<罢工>

2。工作查询

问题在于 MySQL 的非标准疯狂。

MySQL 不会强制你GROUP BY SELECT 中包含的每一列列表。因此,如果您仅GROUP BY一列但总共返回 4 列,不保证其他列值属于分组 changeID返回的记录。如果该列不在 GROUP BY 中MySQL 选择应返回什么值。

使用子查询将保证每次都返回正确的记录值。

正确的是working query将是:

SELECT `t`.* FROM(
    SELECT * FROM `smdbs_app`
    ORDER BY `id` DESC
) `t`
GROUP BY `changeID`
ORDER BY `id`

关于mysql - 获取组内最新记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22797667/

相关文章:

sql - "Tag"搜索/排除查询设计问题

c# - 如何在 MySQL 数据库中使用系统时间查询搜索时间

sql - 如何连接表并根据条件选择重复项

MySQL 从最高到最低的匹配排名的最佳方法是什么?

mysql - 我的程序的数据库设计是否存在循环引用问题?

php - 如何将下拉列表中的值插入到 mysql 查询中以从数据库中检索数据

java - 将 SQL native 查询转换为 Spring 数据 JPA

mysql - 如何获取每个产品属性/过滤器的总数,如 newegg

PHP mysql 无法插入数据库并报错

sql - 如果应用程序崩溃,如何注销客户端