Skip to content

PHP练习生

农工商实习两年半的PHP练习生

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还有很多我不知道的用法~

Avatar

我存过你的照片,研究过你的星座,看过你的每一条动态,跟朋友炫耀过你,我远比你想像的更喜欢你。