mysql如何分组取最新记录

2023-12-12 15:00:14 举报文章

MySQL分组取最新记录的方法

在MySQL中,如果需要分组取最新记录,可以使用子查询和关键字“HAVING”来辅助实现。下面我们详细了解一下实现的步骤。

第一步:创建测试表

在开始实现之前,我们需要创建一个测试表来模拟数据。下面是一个简单的SQL语句,创建了一个名为“test”的表,并向其中插入了4条数据:

CREATE TABLE test(id INT NOT NULL AUTO_INCREMENT, name VARCHAR(20), time DATETIME, PRIMARY KEY (id));

INSERT INTO test(name,time) VALUES('Tom','2022-01-01 00:00:01');

INSERT INTO test(name,time) VALUES('Bob','2022-01-02 00:00:02');

INSERT INTO test(name,time) VALUES('Amy','2022-01-03 00:00:03');

INSERT INTO test(name,time) VALUES('Lisa','2022-01-04 00:00:04');

第二步:使用子查询和HAVING实现分组取最新记录

下面我们介绍用子查询和HAVING实现分组取最新记录的步骤。我们需要查询每个name字段最新一条记录的time字段的值和id字段的值。具体的SQL语句如下:

SELECT MAX(time) AS max_time, id, name FROM test GROUP BY name HAVING MAX(time);

上述SQL语句中,首先使用GROUP BY关键字按照name分组,接着使用MAX函数获取每个分组中time字段的最大值,再使用HAVING关键字筛选time最大值大于0的分组。最后,使用AS关键字给MAX(time)起一个别名max_time,以id、name分别输出结果。

第三步:验证结果

我们执行上述SQL语句后,可以得到下面结果:

+---------------------+----+------+

| max_time         | id | name |

+---------------------+----+------+

| 2022-01-04 00:00:04 | 4 | Lisa |

| 2022-01-03 00:00:03 | 3 | Amy |

| 2022-01-02 00:00:02 | 2 | Bob |

| 2022-01-01 00:00:01 | 1 | Tom |

+---------------------+----+------+

可以看出,我们成功地按照每个name分组,并筛选出每个分组中time最大值大于0的数据。通过这种方式,我们就可以方便地分组取最新记录的数据。

如果你认为本文可读性较差,内容错误,或者文章排版错乱,请点击举报文章按钮,我们会立即处理!