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

weiwei7v8v 2010-12-27 04:02:29
我现在要做个打卡任务系统

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

这个SQL该怎么写啊,

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

...全文
287 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
newdigitime 2010-12-27
  • 打赏
  • 举报
回复
select top 1 1 from table where 刷卡=false and 日期>30天前的日期
如果有记录就表示"非全勤"
如果没有记录就表示"全勤"

wuyq11 2010-12-27
  • 打赏
  • 举报
回复
打卡第一次计算开始时间,DaetTime.adddays或SQL dateadd计算30天后时间
select * from tb where 时间差
weiwei7v8v 2010-12-27
  • 打赏
  • 举报
回复
------第一种返回总数-----
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种方法查询的 现在我不晓得后台该怎么判断哪一天没打卡,用死办法可以写,要是天数多了就麻烦了

weiwei7v8v 2010-12-27
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 jiaweihan_001 的回复:]
引用 9 楼 weiwei7v8v 的回复:
我也限制了 每天只能打一次 问题是 如果用户 今天领的30天打卡任务

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

有30天 100天 我不会写死去

我太笨了,谁能教教 谢谢

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

这些是放在任务表的 包括不同的任务型号,所以加个打卡天数有点不实际了
TENGFEI3636 2010-12-27
  • 打赏
  • 举报
回复
jiaweihan_001 2010-12-27
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 weiwei7v8v 的回复:]
我也限制了 每天只能打一次 问题是 如果用户 今天领的30天打卡任务

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

有30天 100天 我不会写死去

我太笨了,谁能教教 谢谢
[/Quote]
或者,设置一个字段,存放打卡的天数,每天打卡一次这个天数就自增,然后跟总天数30做比较,这个思路不晓得可以吧,?楼主参考下,
weiwei7v8v 2010-12-27
  • 打赏
  • 举报
回复
我也限制了 每天只能打一次 问题是 如果用户 今天领的30天打卡任务

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

有30天 100天 我不会写死去

我太笨了,谁能教教 谢谢
weiwei7v8v 2010-12-27
  • 打赏
  • 举报
回复
3-4-5谢谢你 你那说的确实是对的

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

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

关键是这个条件

reggiekiller 2010-12-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 sp1234 的回复:]

基本的逻辑公里,再学有关于算法、sql之类的东西是应该学到的基本的设计知识,用“否定之否定”的方式来解决那些概括性的查询,这是常识。或许你学sql的时候,你的老师只是给你讲sql server手册上的语法,而不是教你设计(各种使用sql的关系数据库都通用的)sql查询设计基础知识。
[/Quote]
xxoo2007 2010-12-27
  • 打赏
  • 举报
回复

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


1.注意日期要格式化到"日"在disticnt排重.
2.空日期要排掉
  • 打赏
  • 举报
回复
基本的逻辑公里,再学有关于算法、sql之类的东西是应该学到的基本的设计知识,用“否定之否定”的方式来解决那些概括性的查询,这是常识。或许你学sql的时候,你的老师只是给你讲sql server手册上的语法,而不是教你设计(各种使用sql的关系数据库都通用的)sql查询设计基础知识。
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 heizhenpeng 的回复:]
最后判断cnt是否大于30
[/Quote]

这是太........如果是专门学过sql课程,那么你的老师看来没有多少文化。
  • 打赏
  • 举报
回复
SQL Server问题去SQL Server论坛去问吧,那里更专业一些。


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

凡是all(select * from .....)的查询,如果你的关系数据库没有现成的all子查询功能,就要转换为 not exists(select * from .....)的查询。
cpp2017 2010-12-27
  • 打赏
  • 举报
回复
select count(distinct 日期) from ...........这个日期是不带时间的varchar字段,否则要做处理。
翱云 2010-12-27
  • 打赏
  • 举报
回复
第一,限制每个人每天只能打一次卡
第二:select count(*) as cnt from 打卡记录 where createdate>=开始 and createdate<=结束。

最后判断cnt是否大于30

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧