mysql查询重复用户最新的一条数据
越来越觉得mysql的厉害,很多时候sql语句可能会让你突然觉得:sql语句还能这么写的吗?
其实有很多sql语句是我不会写的,也不知可以这样写,之前有说过,sql就像写代码一样,也有很多逻辑的,而不是简单地select一下。
下面来列举一下mysql查询重复用户最新的一条数据
什么意思呢?我举个例子:
假如有一个表记录了学生的成绩,我要查出每个学生最新的成绩
数据有
CREATE TABLE IF NOT EXISTS `score` (
`score_id` bigint(20) NOT NULL AUTO_INCREMENT,
`student_name` varchar(32) DEFAULT NULL,
`course` varchar(30) DEFAULT NULL,
`score` int(11) DEFAULT NULL,
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`score_id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
INSERT INTO `score` (`score_id`, `student_name`, `course`, `score`, `create_time`) VALUES
(1, '张三', '语文', 66, '2019-07-24 10:35:05'),
(2, '张三', '数学', 88, '2019-12-24 10:35:05'),
(3, '张三', '英语', 92, '2019-02-24 10:35:05'),
(4, '李四', '语文', 95, '2019-06-24 10:35:05'),
(5, '李四', '数学', 55, '2019-08-24 10:35:05'),
(6, '李四', '英语', 22, '2019-03-24 10:35:05'),
(7, '王五', '语文', 99, '2019-06-23 10:35:05'),
(8, '王五', '数学', 88, '2019-08-24 10:35:05'),
(9, '王五', '英语', 77, '2019-05-24 10:35:05');
怎么查出每个学生的最新成绩?
SELECT
*
FROM
(
SELECT DISTINCT
*
FROM
score
ORDER BY
create_time DESC
) s
GROUP BY
s.student_name;
问题来了,我只查到了每个学生的最新成绩,如果我要查每个学生对应的每个学科的最新成绩呢?
SELECT
*
FROM
(
SELECT DISTINCT
*
FROM
score
ORDER BY
create_time DESC
) s
GROUP BY
s.student_name,s.course;
以此类推,sql还有很多我不知道的用法~