查询连续多前天幼儿请假数据
SELECT
child_id,
val - ( @rownum := @rownum + 1 ) AS flag,
group_concat( adate ) AS date_join,
GROUP_CONCAT(id),
COUNT( 1 ) num
FROM
(
SELECT
t1.id,
t1.adate,
t1.child_id,
t1.`status`,
( unix_timestamp( t1.adate ) - t2.min_unix ) / 86400 + 1 AS val
FROM
edu_attendance_child_relation AS t1
LEFT JOIN ( SELECT UNIX_TIMESTAMP( min( adate )) AS min_unix, min( adate ) AS min_date, child_id FROM edu_attendance_child_relation GROUP BY child_id ) AS t2 ON t2.child_id = t1.child_id
WHERE
t1.`status` = 1
ORDER BY
t1.child_id ASC,
t1.adate ASC
) AS t3,(
SELECT
@rownum := 0
) AS t4
GROUP BY
child_id,
flag
HAVING
num >= 3
- 主查询幼儿出勤的最小日期,和记录与最小日期差值
- 按幼儿id和日期正序排列,赋予自增列
- 用日期差值减去自增列,连续记录的差值相同
- 按等差和幼儿id分组