我有一个包含attendance
和empno
列的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
----------
请帮助,我已阅读了几篇帖子,但它没有给我我需要的数据,我只是感到困惑。我非常感谢任何答案。
答案 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
将过滤此结果中的第二行。