我有一个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 |
+-------------------------------------------------+
我需要2个查询。首先,为每个员工做最后一次行动。因此,从这个示例表中我需要获得所有列的第3,4和5行。第二,仅针对指定员工获取最新动作。
任何想法如何实现这一目标?我正在使用Spring Data JPA,但原始SQL查询也很棒。
提前谢谢。
答案 0 :(得分:1)
您可以通过自我加入获得预期的输出
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
请注意,如果有相同date_time的行可能需要CASE语句,而另一个属性可以决定应该选择哪一行来处理这种情况,那么它可能会为单个员工返回多行
答案 1 :(得分:1)
第一次查询。简单
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);
答案 2 :(得分:1)
为fred ed做准备...
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;