仅为MySQL中的每个员工和特定员工选择最新记录
我有一个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 |
+-------------------------------------------------+
| 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