2

我有一个 MySQL 表,ATT其中EMP_ID,具有不同的值 1-Present、2-Absent、3-Weekly-off。我想找出在给定日期范围内连续 10 天具有状态 2 的那些。ATT_DATEATT_STATUSATT_STATUSEMP_ID

请帮忙

4

2 回答 2

1

请尝试一下:

SELECT EMP_ID FROM (
SELECT
IF((@prevDate!=(q.ATT_DATE - INTERVAL 1 DAY)) OR (@prevEmp!=q.EMP_ID) OR (q.ATT_STATUS != 2), @rownum:=@rownum+1, @rownum:=@rownum) AS rownumber, @prevDate:=q.ATT_DATE, @prevEmp:=q.EMP_ID, q.*
FROM (
SELECT
EMP_ID
, ATT_DATE
, ATT_STATUS
FROM
org_tb_dailyattendance, (SELECT @rownum:=0, @prevDate:='', @prevEmp:=0) vars
WHERE ATT_DATE BETWEEN '2013-01-01' AND '2013-02-15'
ORDER BY EMP_ID, ATT_DATE, ATT_STATUS
) q
) sq
GROUP BY EMP_ID, rownumber
HAVING COUNT(*) >= 10

逻辑是,首先按员工 ID 和日期对表进行排序。然后引入一个仅在以下情况下增加的行号

  • 这些日子不是连续的或
  • 员工 ID 不是前一个或
  • 状态不是 2

然后我只是按此行号分组,并计算每组中是否有 10 行。那应该是缺席10天或更长时间的人。

于 2013-02-26T10:39:55.503 回答
-1

你有没有尝试过这样的事情

SELECT EMP_ID count(*) as consecutive_count min(ATT_DATE)
FROM (SELECT * FROM ATT ORDER BY EMP_ID) 
GROUP BY EMP_ID, ATT_DATE
WHERE ATT_STATUS = 2
HAVING consecutive_count > 10
于 2013-02-26T09:40:59.410 回答