MYSQL查询连续日期数据

查询连续多前天幼儿请假数据

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分组
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值