mysql - 计算行数并仅从表中获取最后一行

标签 mysql sql select

我有一个名为 employeexam 的表,它的结构和数据是这样的:

--------------------------------------------------------
| id | course_id   | employee_id | degree | date
--------------------------------------------------------
| 1  |  1          | 3           | 8      | 2013-01-14
| 2  |  2          | 4           | 15     | 2013-01-14
| 3  |  2          | 4           | 17     | 2013-01-15
--------------------------------------------------------

期望的结果是:

---------------------------------------------------------------------------
| id | course_id   | employee_id | degree | date        | numOfTakingExams 
---------------------------------------------------------------------------
| 1  |  1          | 3           | 8      | 2013-01-14  | 1
| 3  |  2          | 4           | 17     | 2013-01-15  | 2
---------------------------------------------------------------------------

我的 MySQL 查询:

SELECT DISTINCT(employeexam.employee_id) as employeeid, 
                employeexam.*, 
                exam.numOfTakingExams 
     FROM employeexam
     JOIN (
            SELECT employee_id , COUNT(employee_id ) as numOfTakingExams 
            FROM employeexam  
            GROUP BY employee_id
          ) exam
     ON exam.employee_id  = employeexam.employee_id 
     ORDER BY employeexam.id DESC   

这会正确输出 numOfTakingExams 值,但我不能只选择他上次参加考试的数据。有帮助吗?

最佳答案

SELECT  a.*, b.numOfTakingExams
FROM    employeeExam a
        INNER JOIN
        (
            SELECT  employee_id,
                    MAX(date) max_Date,
                    COUNT(*) numOfTakingExams 
            FROM    employeeExam
            GROUP BY course_ID, employee_id
        ) b ON  a.employee_id = b.employee_id AND
                a.date = b.max_Date

如果设置为AUTO_INCREMENT,您还可以通过最大ID获取最新记录,下面的查询与上面的查询产生相同的结果,

SELECT  a.*, b.numOfTakingExams
FROM    employeeExam a
        INNER JOIN
        (
            SELECT  employee_id,
                    MAX(id) max_Date,
                    COUNT(*) numOfTakingExams 
            FROM    employeeExam
            GROUP BY course_ID, employee_id
        ) b ON  a.employee_id = b.employee_id AND
                a.id = b.max_Date

关于mysql - 计算行数并仅从表中获取最后一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14338146/

相关文章:

sql - 在 MySQL 中加入两个子查询

php - 在 PHP 图片库上创建分页以及每页选择的数量

sql - 如何使用日期字段对数据库进行排序?

php - 如何将带有php的下拉菜单的值传递给数据库

mysql - 如何计算表中多个值的出现次数并选择最大值

MySQL - 保存和加载项目的最佳方法

mysql - 250选择对1

mysql - SQL有很多关联搜索(键,值)

sql - 更新并使用 sum 来计算列值

dataframe - 获取子集化后剩余的数据帧