Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
仅为MySQL中的每个员工和特定员工选择最新记录_Mysql_Sql_Spring_Spring Data Jpa_Greatest N Per Group - Fatal编程技术网

仅为MySQL中的每个员工和特定员工选择最新记录

仅为MySQL中的每个员工和特定员工选择最新记录,mysql,sql,spring,spring-data-jpa,greatest-n-per-group,Mysql,Sql,Spring,Spring Data Jpa,Greatest N Per Group,我有一个MySQL数据库,其中有一个包含员工活动日志的表 +-------------------------------------------------+ | log_id | employee_id | date_time | action_type | +-------------------------------------------------+ | 1 | 1 | 2015/02/03 | action1 | | 2 |

我有一个MySQL数据库,其中有一个包含员工活动日志的表

+-------------------------------------------------+
| log_id | employee_id | date_time  | action_type |
+-------------------------------------------------+
|   1    |      1      | 2015/02/03 |   action1   |
|   2    |      2      | 2015/02/01 |   action1   |
|   3    |      2      | 2017/01/02 |   action2   |
|   4    |      3      | 2016/02/12 |   action1   |
|   5    |      1      | 2016/10/12 |   action2   |
+-------------------------------------------------+
我需要两个问题。首先,让每个员工都有自己的最后行动。因此,从这个示例表中,我需要得到包含所有列的第3、4和5行。第二,仅获取指定员工的最新操作

有什么办法可以做到这一点吗?我使用的是SpringDataJPA,但原始SQL查询也很好


提前感谢您。

您可以通过执行自连接来获得预期的输出

select a.*
from demo a
left join demo b on a.employee_id = b.employee_id 
and a.date_time < b.date_time
where b.employee_id is null
注意:如果存在日期和时间相同的行,则可能会为单个员工返回多行。您可能需要一个CASE语句和另一个属性来决定应选择哪一行来处理此类情况


对于您的第一个查询。简单地

SELECT t1.*
FROM tableName t1
WHERE t1.log_id = (SELECT MAX(t2.log_id)
                 FROM tableName t2
                 WHERE t2.employee_id = t1.employee_id)
第二个

SELECT t1.*
FROM tableName  t1
WHERE t1.employee_id=X and t1.log_id = (SELECT MAX(t2.log_id)
                 FROM tableName t2
                 WHERE t2.employee_id = t1.employee_id);
准备好接受弗雷德·埃德

SELECT x.* 
  FROM my_table x 
  JOIN 
     ( SELECT employee_id
            , MAX(date_time) date_time 
         FROM my_table 
        GROUP 
           BY employee_id
     ) y 
    ON y.employee_id = x.employee_id 
   AND y.date_time = x.date_time;

从[日期时间]所在的表格中选择*从员工id=1的表格中选择Maxdate\u时间;这将为您提供特定员工的最新操作,并且您可以为每个员工运行loo,以更改查询中的员工Id