当前位置:编程学习 > C#/ASP.NET >>

SQL server2005 怎么查询30天内用户是否每天有打卡

我现在要做个打卡任务系统

用户领取连续打卡30天的任务 , 中间有一天没打卡就任务失败

这个SQL该怎么写啊,

希望大虾们写详细点,谢谢

--------------------编程问答-------------------- 第一,限制每个人每天只能打一次卡
第二:select count(*)  as cnt from 打卡记录 where createdate>=开始 and createdate<=结束。

最后判断cnt是否大于30  --------------------编程问答-------------------- select count(distinct 日期) from ...........这个日期是不带时间的varchar字段,否则要做处理。
--------------------编程问答-------------------- SQL Server问题去SQL Server论坛去问吧,那里更专业一些。


给你一个知识:凡是带有“全部”这个算子的计算,如果你没有现成的工具已经封装了它,那么就要转换为“不存在”这个算子来计算。比如查询“每一天都没有迟到”就要转换为对这个查询“存在某一天,这一天迟到了”的否定。

凡是all(select * from .....)的查询,如果你的关系数据库没有现成的all子查询功能,就要转换为 not exists(select * from .....)的查询。 --------------------编程问答--------------------
引用 1 楼 heizhenpeng 的回复:
最后判断cnt是否大于30


这是太........如果是专门学过sql课程,那么你的老师看来没有多少文化。 --------------------编程问答-------------------- 基本的逻辑公里,再学有关于算法、sql之类的东西是应该学到的基本的设计知识,用“否定之否定”的方式来解决那些概括性的查询,这是常识。或许你学sql的时候,你的老师只是给你讲sql server手册上的语法,而不是教你设计(各种使用sql的关系数据库都通用的)sql查询设计基础知识。 --------------------编程问答--------------------

select count(distinct(convert(varchar(12), CREATE_TIME,102)))
from t_func
where FUNC_CREATE_TIME is not null
and 日期条件


1.注意日期要格式化到"日"在disticnt排重.
2.空日期要排掉 --------------------编程问答--------------------
引用 5 楼 sp1234 的回复:
基本的逻辑公里,再学有关于算法、sql之类的东西是应该学到的基本的设计知识,用“否定之否定”的方式来解决那些概括性的查询,这是常识。或许你学sql的时候,你的老师只是给你讲sql server手册上的语法,而不是教你设计(各种使用sql的关系数据库都通用的)sql查询设计基础知识。
--------------------编程问答-------------------- 3-4-5谢谢你 你那说的确实是对的

问题是我的问题 并不关是查询用户30天内是否连续打卡

比如 用户领取了这个任务  如果他一天没上来打卡 任务就失败

关键是这个条件 

--------------------编程问答-------------------- 我也限制了 每天只能打一次 问题是 如果用户 今天领的30天打卡任务 

后天再登陆的 这我该怎么判断了 头痛啊 在往后了 难道我要天天传日期 与任务的日期进行对比吗

有30天 100天 我不会写死去

我太笨了,谁能教教 谢谢
--------------------编程问答--------------------
引用 9 楼 weiwei7v8v 的回复:
我也限制了 每天只能打一次 问题是 如果用户 今天领的30天打卡任务 

后天再登陆的 这我该怎么判断了 头痛啊 在往后了 难道我要天天传日期 与任务的日期进行对比吗

有30天 100天 我不会写死去

我太笨了,谁能教教 谢谢

或者,设置一个字段,存放打卡的天数,每天打卡一次这个天数就自增,然后跟总天数30做比较,这个思路不晓得可以吧,?楼主参考下, --------------------编程问答-------------------- --------------------编程问答--------------------
引用 10 楼 jiaweihan_001 的回复:
引用 9 楼 weiwei7v8v 的回复:
我也限制了 每天只能打一次 问题是 如果用户 今天领的30天打卡任务

后天再登陆的 这我该怎么判断了 头痛啊 在往后了 难道我要天天传日期 与任务的日期进行对比吗

有30天 100天 我不会写死去

我太笨了,谁能教教 谢谢

或者,设置一个字段,存放打卡的天数,每天打卡一次这个天数就自增,然后跟总天数30做比较,这个思路不晓得可……


这些是放在任务表的 包括不同的任务型号,所以加个打卡天数有点不实际了 --------------------编程问答-------------------- ------第一种返回总数-----
select count(date)as '总数' from (
select convert(varchar(10),a.regdate,112) as date from userinfo a inner join dbo.UserInfoDetail b 
on a.userid=b.userid where b.parentuserid=1 and a.regdate between 
'2010-12-17 00:00:00' and '2012-12-19 00:00:00' group by convert(varchar(10),a.regdate,112)) a

----第二种返回条数-------
select convert(varchar(10),a.regdate,112) as date,* from userinfo a inner join dbo.UserInfoDetail b 
on a.userid=b.userid where b.parentuserid=1 and a.regdate between 
'2010-12-17 00:00:00' and '2012-12-19 00:00:00'

我写了2种方法查询的  现在我不晓得后台该怎么判断哪一天没打卡,用死办法可以写,要是天数多了就麻烦了

--------------------编程问答-------------------- 打卡第一次计算开始时间,DaetTime.adddays或SQL  dateadd计算30天后时间
select  *  from tb where 时间差
--------------------编程问答-------------------- select top 1 1 from table where  刷卡=false and 日期>30天前的日期
如果有记录就表示"非全勤"
如果没有记录就表示"全勤"

补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,