连续几天缺席

时间:2013-11-12 21:00:09

标签: mysql sql

我有一个包含attendanceempno列的MySql表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
----------

请帮助,我已阅读了几篇帖子,但它没有给我我需要的数据,我只是感到困惑。我非常感谢任何答案。

1 个答案:

答案 0 :(得分:0)

我会尝试这样的事情。

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将过滤此结果中的第二行。

相关问题