sqlserver查询连续签到天数

create table #t
(keyId int identity,actionDate datetime)
insert into #t(actionDate) select distinct CreateDate from CRM_ScoreTransaction WHERE MemberID=‘1E7DFF7F-51ED-4E21-8471-E892E0326BBD‘ order BY CreateDate desc
---采用遍历的方式生成用户连续签到的天数 start
declare @i int ,@imax int ,@startDate datetime
set @i=1
select @imax = max(keyId),@startDate =max(actionDate) from #t

while @i <@imax
begin
set @startDate = dateadd(day,-1,@startDate)
set @i [email protected]+1

if not exists(
select null from #t where keyId [email protected] and actionDate [email protected]
)
begin
set @[email protected]
break;
end
end

if @imax is null
begin
set @i=0
end

select convert(varchar(20),@i) signinday

---采用遍历的方式生成用户连续签到的天数 end
go
truncate table #t
drop table #t

原文地址:https://www.cnblogs.com/heyiping/p/10219004.html

时间: 2024-10-10 12:48:36

sqlserver查询连续签到天数的相关文章

传入用户id查询连续签到天数

DROP FUNCTION IF EXISTS getTimes; DELIMITER $$ CREATE    FUNCTION  getTimes(idstr VARCHAR(50)) RETURNS INT BEGIN DECLARE times INT; DECLARE a INT; DECLARE tempdt DATETIME; DECLARE tempdt2 DATETIME; SET  times = 0; SET a=1; SELECT COUNT(*) INTO times

获取连续登陆天数,连续签到天数 ,方法优化

获取连续登陆天数,连续签到天数,类似这样的需求应该是一个常见的需求,那么我们有没有一套成熟的解决方案呢 ?下面我来跟大家分享一下我的故事. 在猴年马月的一天,有个用户反馈个人中心打开缓慢,需要7.8秒,做为一个认真负责任的程序员GG,我尼玛放下手中的其他工作,跟踪调查并且解决该问题. 第一步重现问题: 连着登陆了好几个账号到个人中心,打开都不慢呀 ,那是什么问题呢,就你一个人出问题,是你人品差吧,正当打算以此敷衍用户的时候,测试组的小陶说,他也遇到了这个问题,纳尼 !!你个人品差的家伙 ,让俺来

统计连续签到的方法

/** * 从最后一次签到时间反推连续签到天数 * * @param list * List<Date> * @param asc * boolean (true:ASC,false:DESC) 对list的描述,是升序还是降序 * @return * * */ public static Map<String, Object> calcuContinue(List<Date> list, boolean asc) { Date end = new Date(); Da

连续时间查询问题-查询一个用户连续登陆天数超过N天的用户

问题:比如查询一个用户连续登陆天数超过7天的用户,或者查询连续在7天的某个时间段登陆的用户. 网上查询sql的语句的用法,对于hive来说也可以试试,查询词"SQL 连续天数查询" 如果使用hadoop如何解决?? 思路(以连续N天登陆为例): 1.计算出每天登陆的用户集合 1.使用MR,第一个job(map以日期为key,对用户进行分组输出.reduce设计:内部构造一个以N容量大小的列表(作为队列),模拟一下啊(日期过来就是有序的,从小到大) 1)第一个日期过来,放在list里面,

PHP连续签到

require "./global.php"; $act = isset($_GET['act']) ? $_GET['act'] : "error"; // d($act); switch($act){ case "qiandao": $uid = intval($_POST['uid']); $res = $db -> get('qian_dao','*',array('uid'=>$uid)); // last_query();

利用SQLServer查询分析器获取存储过程的返回值,检查测试存储过程

1.存储过程没有返回值的情况(即存储过程语句中没有return之类的语句)用方法 int count = ExecuteNonQuery(..)执行存储过程其返回值只有两种情况(1)如果通过查询分析器执行该存储过程,在显示栏中如果有影响的行数,则影响几行count就是几(2)如果通过查询分析器执行该存储过程,在显示栏中如果显示'命令已成功完成.'则count = -1;在显示栏中如果有查询结果,则count = -1总结:A.ExecuteNonQuery()该方法只返回影响的行数,如果没有影响

如何为SQLSERVER查询分析器开启事务

很多人在使用SQLSERVER查询分析器的时候会遇到个问题,就是操作正式库的时候,担心增删改万一弄错了该咋办?数据是无价的! 难道我们每次都要去写事务语句去做这个事情吗? SMSS其实已经给我提供了这样一个功能,对查询分析器开启事务,也就是说,你在查询分析器中执行的语句不会立刻提交到数据库,而是在事务中执行,如果你确认操作无误可以COMMIT,发现有误需要更正就立刻ROLLBACK回来,数据完好无损,皆大欢喜.具体怎么用整理如下,给大家做个参考. Step1:打开SSMS,选择工具,选项,如图所

sqlserver查询数据的所有表名和行数

原文:sqlserver查询数据的所有表名和行数 //查询所有表明select name from sysobjects where xtype='u' select * from sys.tables //查询数据库中所有的表名及行数 SELECT a.name AS [TABLE NAME] , b.rows AS [RECORD COUNT] FROM sysobjects AS a INNER JOIN sysindexes AS b ON a.id = b.id WHERE ( a.t

[zhuan]SQLServer查询最近一天,三天,一周,一月,一季度方法

三天 select * from T_news where datediff(day,addtime,getdate())<= 2 and datediff(day,addtime,getdate())>= 0 一周 select * from T_news WHERE (DATEPART(wk, addtime) = DATEPART(wk, GETDATE())) AND (DATEPART(yy, addtime) = DATEPART(yy, GETDATE())) 注意:此时不能用