[英]Find consecutive days absent
我有一個empno
和timeindate
列的MySql表attendance
。 我無法連續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
將從該結果中過濾第二行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.