2

私は、 1-Present、2-Absent、3-Weekly-off という異なる値を持つ、を持つMySQL テーブルATTを持っています。特定の日付範囲で 10 日間連続してステータス 2 になっているを見つけたいです。EMP_IDATT_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 に答える