sql 语句:一个字段,连续几天值大于0,获得天数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql 语句:一个字段,连续几天值大于0,获得天数相关的知识,希望对你有一定的参考价值。

例子:
字段1 字段2 字段3
aaa bbb 时间1
aaa bbb 时间2
aaa bbb 时间3
aaa bbb 时间4
关键字aaa 最近连续几天,值bbb大于0
关键字 数值 时间
aaa 2 20090704
aaa 3 20090703
aaa 2 20090702
aaa -1 20090701
aaa 3 20090630
aaa 4 20090629
... ...

结果为3
按时间排序 最近数值连续大于0的和

参考技术A 加一个用来判断的字段 ttt
该字段为0和1
如果纪录的上面一条记录的 ttt 为0 并且该纪录的bbb不是负 ttt 为 0
否则为1
然后根据 ttt,把1的去掉就行。本回答被提问者采纳
参考技术B 按照 aaa分组,用条件把天数负的除掉,count(*)就可以。

SQL 计算最长连续登录天数

参考:https://blog.csdn.net/ganghaodream/article/details/100083543

SQL计算最长登录天数

计算最长登陆天数主要用两个函数:1.窗口函数row_number()over() 2.date_sub()

1.使用row_number()窗口函数

select UID,loadtime,row_number()over(partition by UID order by loadtime) sort
from user_login

2.使用date_sub()函数

select UID,date_sub(loadtime,sort) as date_group,min(loadtime) as start, max(loadtime) as end ,count(1) as continue_days
      (select UID,loadtime,row_number()over(partition by UID order 	  by loadtime) sort
       from user_login
      ) a
group by UID,date_sub(loadtime,sort)

3.以UID分组,取max(continue_days)

select UID,max(continue_days) as maxday
      (select UID,date_sub(loadtime,sort) as 	 date_group,min(loadtime) as start, max(loadtime) as end ,count(1) as continue_days
            (select UID,loadtime,row_number()over(partition by UID order by loadtime) sort
	     from user_login
    	    ) a
       group by UID,date_sub(loadtime,sort)
      ) b
group by UID

以上是关于sql 语句:一个字段,连续几天值大于0,获得天数的主要内容,如果未能解决你的问题,请参考以下文章

sql 语句:一个字段,连续几天值大于0,获得天数 怎么解决的?请教

利用SQL语句如何获得两个日期之间相差的天数

利用SQL语句如何获得两个日期之间相差的天数

如何用SQL解决连续几天的问题

SQL:连续天数的计算方法

在 SQL 中计算连续班次和天数