【问题标题】:MYSQL function to count the numbers of the last continues dateMYSQL 函数来计算最后一个继续日期的数量
【发布时间】:2016-03-03 07:41:47
【问题描述】:

我有一张这样的桌子...

jhm_remind_signin
(id INT PRIMARY KEY
,user_id INT
,remind_id INT
,signin_date DATETIME
,signin_cycle VARCHAR(20)
,is_delete TINYINT
,created_time DATETIME
,created_by INT
,updated_time DATETIME
,updated_by INT
);

...有这样的相关数据...

signin_date
2016-03-03 14:24:02
2016-03-04 14:24:02
2016-03-05 14:24:02
2016-03-06 14:24:02
2016-03-07 14:24:02
2016-03-08 14:24:02
2016-03-09 14:24:02
2016-03-10 14:24:02
2016-03-11 14:24:02
2016-03-12 14:24:02
2016-03-13 14:24:02
2016-03-14 14:24:02
2016-03-15 14:24:02
2016-03-16 14:24:02
2016-03-18 14:24:02
2016-03-19 14:24:02
2016-03-20 14:24:02

我想统计最后一个续签日期的人数,如果有一天不注册我们必须重新计算人数。

所以,我想要一个看起来像这样的结果......

【问题讨论】:

  • java代码我可以数,但是我想用sql.所以我不知道
  • 没有图片谢谢,只是格式正确的问题
  • 点击“在此处输入图片描述”,您可以找到图片,谢谢

标签: mysql sql function


【解决方案1】:
SELECT @counter:=case @prev_date 
                 when DATE_ADD(signin_date, INTERVAL -1 DAY) then @counter+1 
                 else 0 end as continuous_count,
       @prev_date:=DATE(signin_date) 
FROM the_table
ORDER_BY signin_date

每行的选择计算continuous_count - 连续天数间隔的长度。

您需要最后一行的 continuous_count

【讨论】:

  • 不错的sql,但是有一点错误,我不能这样写sql,所以我不知道如何修复它。错误是“[2016-03-03 16:25 :36] [42000][1064] 您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,以获取在 '@prev_date:=DATE(signin_date) as Continuous_count FROM jhm_remind_signin ORDER_B' 附近使用的正确语法在第 4 行"。
【解决方案2】:

我认为如果只使用 sql 是不可能的。您可以在此表中添加一个文件,例如 last_continues_signin_flag。然后每次插入数据时,你可以用数据中的最大sign_date检查当前日期,如果这个时间是continue last_continues_signin_flag = 1 else last_continues_signin_flag = 0,所以你可以使用这个字段来计算你想要的。

【讨论】:

  • 不可能是什么
猜你喜欢
  • 2010-11-25
  • 2022-11-03
  • 2019-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多