m0_69952008 2024-08-28 08:29 采纳率: 0%
浏览 15

sql统计10天内,连续签到4天及以上的人数。

并且需要从今天开始往前统计,如今日是10日,某员工在45678日签到,今天未签到,不统计。
查询结果需要字段:连续签到天数,开始签到天数,人员id

  • 写回答

2条回答 默认 最新

  • 来一杯龙舌兰 2024-08-28 09:00
    关注

    以下回复由本人参考gpt作答:

    要在MySQL中编写一个SQL查询,以统计在过去10天内连续签到4天及以上的人员数量,并且以今日为基准,考虑到今日未签到不算作连续签到的一部分,可以按照以下步骤来构建查询。

    假设你有一个签到记录表 sign_in_records,表结构如下:

    • employee_id (员工ID)
    • sign_in_date (签到日期)

    首先,确保表中的日期是以标准日期格式存储的,例如 YYYY-MM-DD

    下面是一个SQL查询示例,它实现了你所要求的功能:

    SET @today := CURDATE();
    
    -- 创建一个视图来获取过去10天的签到记录
    CREATE TEMPORARY TABLE recent_sign_ins AS
    SELECT employee_id, sign_in_date
    FROM sign_in_records
    WHERE sign_in_date BETWEEN DATE_SUB(@today, INTERVAL 9 DAY) AND @today;
    
    -- 查找每个员工在这段时间内的签到记录
    CREATE TEMPORARY TABLE streaks AS
    SELECT
        employee_id,
        sign_in_date,
        @row_num := IF(@prev_employee_id = employee_id, @row_num + 1, 1) AS streak,
        @prev_employee_id := employee_id AS prev_employee_id
    FROM recent_sign_ins
    ORDER BY employee_id, sign_in_date;
    
    -- 查找连续签到天数大于等于4天的记录
    SELECT
        streak AS consecutive_days,
        MIN(sign_in_date) AS start_date,
        employee_id
    FROM streaks
    WHERE streak >= 4
    GROUP BY employee_id, streak;
    
    -- 清理临时表
    DROP TEMPORARY TABLE recent_sign_ins;
    DROP TEMPORARY TABLE streaks;
    

    解释:

    1. 获取过去10天的签到记录

      • 使用 DATE_SUB 函数计算出10天的时间范围,并筛选 sign_in_records 表中在该时间范围内的签到记录。
    2. 计算每个员工的签到连续天数

      • 使用一个用户变量 @row_num 来跟踪每个员工的连续签到天数。
      • 根据 employee_idsign_in_date 进行排序,并计算连续签到天数。
    3. 查找连续签到天数大于等于4天的记录

      • 对于计算出的连续签到天数,筛选出连续签到天数大于等于4天的记录。
      • 使用 MIN(sign_in_date) 来获取连续签到的开始日期。
    4. 清理临时表

      • 删除临时表以释放资源。

    注意:在实际应用中,你可能需要根据具体的数据库表结构和数据量来调整查询。上述查询是基于一个假设的表结构和数据量,如果数据量很大或者表结构复杂,可能需要进一步优化。

    评论

报告相同问题?

问题事件

  • 创建了问题 8月28日

悬赏问题

  • ¥15 通联支付网上收银统一下单接口
  • ¥15 angular有偿编写,
  • ¥15 centos7系统下abinit安装时make出错
  • ¥15 hbuildex运行微信小程序报错
  • ¥15 关于#python#的问题:我知道这个问题对你们来说肯定so easy
  • ¥15 wpf datagrid如何实现多层表头
  • ¥15 为啥画版图在Run DRC会出现Connect Error?可我Calibre的hostname和计算机的hostname已经设置成一样的了。
  • ¥20 网站后台使用极速模式非常的卡
  • ¥20 Keil uVision5创建project没反应
  • ¥15 mmseqs内存报错