更新签到日期SQL

签到日期出现错误, 工具类判断都是正数,总是理论课日期, 需要修改成与场次日期比较, 取小的, 场次日期是取3场中最小的,然后与之比较。

 

UPDATE  
  SIM_SUITE E
  SET e.checkin_date = 
  
  (
  --SELECT MIN(T.S_DATE) 
  SELECT CASE WHEN MIN(T.S_DATE) > e.checkin_date THEN e.checkin_date ELSE MIN(T.S_DATE) END  AS d1
          FROM sim_training_sim T
         WHERE T.SUITE_ID = E.SUITE_ID) 

 WHERE E.AC_TYPE_CODE = 12
   AND E.FIXED_YEAR = '2013上半年'
   AND E.BENCH_MONTH = 2

 ;
 
### 实现 SQL 连续签到功能 在 SQL 中实现连续签到功能的核心在于如何检测用户是否每天连续签到,并在断签后重新开始计数。常见的应用场景包括用户签到天数统计、奖励机制等。以下是几种实现方法: #### 1. 基于日期差的连续签到计算 通过查询用户的签到记录,找出最近一次未签到日期,然后计算当前日期与该日期之间的天数差,即可得到连续签到天数。例如: ```sql SELECT fuser_id, CASE WHEN c.最大断签日期 IS NULL THEN DATEDIFF('2021/6/6', b.最开始签到日期) + 1 ELSE DATEDIFF('2021/6/6', c.最大断签日期) END AS fcontinuous_days FROM t_user_attendence a LEFT JOIN ( SELECT fuser_id, MIN(fdate) '最开始签到日期' FROM t_user_attendence WHERE fis_sign_in = 1 GROUP BY 1 ) b ON a.fuser_id = b.fuser_id LEFT JOIN ( SELECT fuser_id, MAX(fdate) '最大断签日期' FROM t_user_attendence WHERE fis_sign_in = 0 GROUP BY 1 ) c ON a.fuser_id = c.fuser_id WHERE a.fdate = '2021/6/6'; ``` #### 2. 使用 `UPDATE` 更新连续签到天数 如果需要动态更新用户的连续签到天数,可以通过 `UPDATE` 语句来实现。例如: ```sql UPDATE 签到表 SET 连续签到天数 = CASE WHEN 最近签到日期 = DATE_ADD(CURDATE(), INTERVAL -1 DAY) THEN (连续签到天数 + 1) % 7 ELSE 0 END WHERE id = id; UPDATE 签到表 SET 最近签到日期 = CURDATE(); ``` #### 3. 查询当天是否签到 可以通过以下 SQL 查询用户当天是否签到: ```sql SELECT COUNT(*) FROM 表名 WHERE DATE_FORMAT(datetime, '%Y%m%d') = DATE_FORMAT(NOW(), '%Y%m%d'); ``` 如果返回值为 0,则表示当天未签到。 #### 4. 处理断签情况 对于断签的情况,可以通过子查询查找漏签的日期,并根据这些日期计算连续签到天数。例如: ```sql SELECT * FROM testsign WHERE TYPE = 0 AND DATE_FORMAT(signtime, '%Y%m%d') > ( SELECT IFNULL(MAX(DATE_FORMAT(signtime, '%Y%m%d')), "20170520") FROM testsign WHERE TYPE = 1 AND DATE_FORMAT(signtime, '%Y%m%d') <= DATE_ADD(NOW(), INTERVAL -1 DAY) AND DATE_FORMAT(signtime, '%Y%m%d') NOT IN ( SELECT DATE_FORMAT(signtime, '%Y%m%d') FROM testsign WHERE TYPE = 0 AND userid = 800675 ) ) AND DATE_FORMAT(signtime, '%Y%m%d') <= '20170605' AND userid = 800675; ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值