Mysql 连续缺勤
我有一个MySql表,包含empno和timeindate列。我无法获取连续3天缺勤的员工的数据: 以下是我的示例数据:Mysql 连续缺勤,mysql,sql,Mysql,Sql,我有一个MySql表,包含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-
==========
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子句的第二个查询:
如您所见,WHERE将从该结果中筛选第二行。您的表做什么???我的表使用ApplicationTanks插入/记录员工的工作时间以进行回复,很抱歉回复太晚。从你的剧本中得到了一个想法并做了一些调整。收到我需要的报告了。谢谢
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.