mysql 分组后取最新一条
时间: 2023-07-11 19:51:50 浏览: 48
你可以使用以下 SQL 语句来实现:
```sql
SELECT *
FROM your_table
WHERE (group_id, created_at) IN (
SELECT group_id, MAX(created_at)
FROM your_table
GROUP BY group_id
);
```
其中,`your_table` 是你要查询的表,`group_id` 是你想要分组的列,`created_at` 是你想要比较的时间列。这个查询会对 `group_id` 进行分组,然后在每组内选择一个最大的 `created_at`,然后返回这个 `group_id` 和对应的最大 `created_at` 的行。这样,你就可以得到每个分组内最新的一条记录了。
相关问题
mysql分组后取最新一条数据
可以使用子查询和GROUP BY语句来实现在MySQL中分组后取最新一条数据。例如,假设我们有一个名为mytable的表,其中包含id、name和created_at列,我们想要按name分组,并取每个分组中created_at最新的记录,可以使用以下查询语句:
```
SELECT id, name, created_at
FROM mytable
WHERE (name, created_at) IN (
SELECT name, MAX(created_at)
FROM mytable
GROUP BY name
);
```
这个查询语句中的子查询首先按name分组,然后找到每个分组中created_at的最大值。然后,外部查询将返回与这些(name, created_at)组合匹配的记录的id、name和created_at列。这样我们就可以实现在MySQL中分组后取最新一条数据。
mysql 分组后取时间最新的一条
可以使用子查询和联结的方式来实现MySQL分组后取时间最新的一条数据。具体步骤如下:
1.使用子查询获取每个分组中时间最新的一条数据,子查询语句如下:
```
SELECT address, MAX(create_time) AS create_time
FROM test
GROUP BY address
```
2.将上述子查询结果作为临时表,与原始表进行联结,获取每个分组中时间最新的一条数据的完整信息,联结语句如下:
```
SELECT t.*
FROM test t
JOIN (
SELECT address, MAX(create_time) AS create_time
FROM test
GROUP BY address
) t2 ON t.address = t2.address AND t.create_time = t2.create_time
```
上述语句中,t2是子查询的结果,包含每个分组中时间最新的一条数据的地址和时间信息,t是原始表,通过地址和时间与t2进行联结,获取每个分组中时间最新的一条数据的完整信息。