5.7版本之前,mysql根据某个字段分组,并获取最新的内容
时间: 2024-05-12 15:20:28 浏览: 56
mysql5.7版本
可以使用子查询和内连接实现。
假设有以下数据表:
```
CREATE TABLE messages (
id INT PRIMARY KEY,
sender VARCHAR(50),
message TEXT,
created_at DATETIME
);
INSERT INTO messages VALUES
(1, 'Alice', 'Hello', '2021-01-01 10:00:00'),
(2, 'Bob', 'Hi', '2021-01-01 11:00:00'),
(3, 'Carol', 'Hey', '2021-01-01 12:00:00'),
(4, 'Dan', 'Yo', '2021-01-01 13:00:00'),
(5, 'Eve', 'Hi there', '2021-01-01 14:00:00'),
(6, 'Alice', 'What\'s up?', '2021-01-01 15:00:00'),
(7, 'Bob', 'How are you?', '2021-01-01 16:00:00');
```
现在要按照发送者分组,并获取每个发送者最新的一条消息。
方法一:使用子查询和内连接
```
SELECT m.sender, m.message, m.created_at
FROM messages m
INNER JOIN (
SELECT sender, MAX(created_at) AS latest_created_at
FROM messages
GROUP BY sender
) latest ON m.sender = latest.sender AND m.created_at = latest.latest_created_at;
```
这个查询先使用子查询获取每个发送者的最新消息的时间戳,然后将结果与原始表连接,获取每个发送者最新的一条消息。
方法二:使用子查询和IN运算符
```
SELECT sender, message, created_at
FROM messages
WHERE (sender, created_at) IN (
SELECT sender, MAX(created_at)
FROM messages
GROUP BY sender
);
```
这个查询也使用子查询获取每个发送者的最新消息的时间戳,并使用IN运算符获取每个发送者最新的一条消息。
阅读全文