MySQL检索员工的状态

代码行

我需要检索当天员工的状态。存在状态有两种:In&Out如果员工没有在场,则应以空状态检索。

我有两个表,Employees并且Presences我想加入他们。

ID  |  name  
1      John
2      Julie
3      Anthony
4      Joseph

现在状态表具有以下数据:

ID  |  employee_id  |  presence_date     |  presence_hour   |  Movement  
1      1               2016-08-30           08:55              In
2      2               2016-08-30           08:56              In
3      3               2016-08-30           08:57              In
4      1               2016-08-30           12:33              Out
5      2               2016-08-30           12:34              Out

正如您在状态数据中看到的那样,员工Anthony尚未离开办公室,并且员工Joseph在表中没有任何条目。

我期望的结果

Employee  |  Movement  
John         Out  
Julie        Out
Anthony      In
Joseph       null   

我正在使用的查询

SELECT employee.name, presence.movement
FROM employees AS employee
LEFT JOIN presences AS presence ON presence.employee_id = employee.id
WHERE presence.presence_date = '2016-08-30' AND 
      employee.id IN (1, 2, 3, 4)
GROUP BY employee.id
ORDER BY employee.name, presence.id DESC

我面临的问题

  1. 约瑟夫永远不会出现在数据中
  2. presence.id DESC 不起作用
阴影
  1. 这是由于在where条件中应用了日期过滤器引起的。加入应用where标准,从而消除了Joseph的任何记录,因为他当天没有在场。而是将日期条件移到加入条件。

  2. 您完全group by错了,您的查询违反了sql标准,因为选择列表中的列不在分组依据列表中,并且不是聚合函数的主题,例如max()MySQL仅允许在某些sql模式设置下进行此类查询。用于max()员工名称和日期字段的移动和分组。

示例查询,假设您每个员工每天只能进出一出:

SELECT employee.name, max(presence.movement) as movement
FROM employees AS employee
LEFT JOIN presences AS presence ON presence.employee_id = employee.id and date(presence.presence_date) = '2016-08-30'
WHERE employee.id IN (1, 2, 3, 4)
GROUP BY employee.name, date(presence.presence_date)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章