簡體   English   中英

尋找連續的日子

[英]Find consecutive days absent

我有一個empnotimeindate列的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM