我有一个 MySql 表 attendance
,其中包含 empno
和 timeindate
列。我无法获取连续 3 天缺勤的员工的数据:
这是我的示例数据:
==========
empno: | timeindate
empno 1 | 2013-10-01 00:00:00
empno 2 | 2013-10-01 00:00:00
empno 1 | 2013-10-02 00:00:00
empno 2 | 2013-10-02 00:00:00
empno 2 | 2013-10-03 00:00:00
empno 2 | 2013-10-04 00:00:00
empno 2 | 2013-10-05 00:00:00
empno 1 | 2013-10-06 00:00:00
empno 2 | 2013-10-06 00:00:00
----------
请帮忙,我已经阅读了几篇文章,但没有提供我需要的数据,我感到很困惑。如果有任何答案,我将不胜感激。
最佳答案
我会尝试这样的事情。
WITH T AS
(SELECT empno, dateintime, @row:=@row+1 rownum FROM
attendance JOIN (SELECT @row:=0) init
ORDER BY empno, timeindate)
SELECT DISTINCT t1.empno
FROM T AS t1 INNER JOIN T AS t2
ON t1.empno = t2.empno AND t1.rownum = t2.rownum + 1
WHERE TIMESTAMPDIFF(DAY, t2.dateintime, t1.dateintime) >= 3
第一个查询按日期时间对表进行排序并枚举行。然后,您将它与自身连接起来,移动行号,在一行中获取相邻的日期时间。然后,您只需查找具有所需差异的条目。
我不确定它是否有效,但它应该是这样工作的:第一个查询:
empno: | timeindate | row
empno 1 | 2013-10-01 00:00:00 | 0
empno 1 | 2013-10-02 00:00:00 | 1
empno 1 | 2013-10-06 00:00:00 | 2
empno 2 | 2013-10-01 00:00:00 | 3
empno 2 | 2013-10-02 00:00:00 | 4
empno 2 | 2013-10-03 00:00:00 | 5
empno 2 | 2013-10-04 00:00:00 | 6
empno 2 | 2013-10-05 00:00:00 | 7
empno 2 | 2013-10-06 00:00:00 | 8
没有 WHERE
子句的第二个查询:
empno 1 | 2013-10-02 00:00:00 | 2013-10-02 00:00:00
empno 1 | 2013-10-02 00:00:00 | 2013-10-06 00:00:00
empno 2 | 2013-10-01 00:00:00 | 2013-10-02 00:00:00
empno 2 | 2013-10-02 00:00:00 | 2013-10-03 00:00:00
etc.
如您所见,WHERE
将从该结果中过滤出第二行。
关于mysql - 查找连续缺席的天数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19939785/