我有一个表,里面有姓名、状态(出、入)和刷卡时间等字段。现在我要查询当前不在房屋里的人,即
"select * from InOut where 状态='出' and 姓名='张三' and 刷卡时间<='" & now & "'" ,由于张三之前进进出出不知多少次,但这个时间张三已经返回房屋,所以这个查询只能查询出张三在这个时间前处于'出'状态的记录,因此这个SQL语句是错误的。
我想了想,因为状态是成对出现的,能不能统计这个状态是否是2的倍数来做查询条件。各位高手,帮帮我啊.
"select * from InOut where 状态='出' and 姓名='张三' and 刷卡时间<='" & now & "'" ,由于张三之前进进出出不知多少次,但这个时间张三已经返回房屋,所以这个查询只能查询出张三在这个时间前处于'出'状态的记录,因此这个SQL语句是错误的。
我想了想,因为状态是成对出现的,能不能统计这个状态是否是2的倍数来做查询条件。各位高手,帮帮我啊.
解决方案 »
- 库存分批出货
- 存储过程修改
- TEMPDB数据库1105错误
- win98下用必须用MSDE的实际服务器名字,如“王丹可\YH”而不能用等同的"127.0.0.1\YH"或"localhost\yh"代替,是什么原因?而实际的数据库名“王丹可\YH”又如何直接得到?
- 新手查询问题啊,超级容易到手的分啊。谁答对了就给谁
- 一个查询问题?
- 急急急:[Microsoft][ODBC SQL Server Driver][Shared Memory]ConnectionCheckForData (CheckforData()).
- 深圳谁有软考书《数据库系统工程师》转让?
- 关于作业的问题
- win2000机子怎么与win98连网,win2000做局域网模拟服务器,win98访问win2000上ip指定的网页
- 弱弱的问一个关于排序的问题
- 高手们,sql2000跟踪的问题!!!
select * from InOut where 状态='出' and 姓名='张三' and datadiff(mi,刷卡时间,getdate())>0
由于张三此前进出过不知多少次,所以这个查询张三也位列其中,但此时张三已经回到房屋,因此当前不在房屋里的人不应该包含张三。
select 姓名 ,[状态]=case when count(状态)%2=0 then '出' else '进' end
from Tb
group by 姓名
declare @a int ,@b datetime,@c nvarchar(500)
select @a=count(*) from InOut where 姓名='张三'
select @b=max(刷卡时间)from InOut where 姓名='张三'
if @a%2=0
set @c='此人已出去,出去时间为'+cast(datediff(mi,@b,getdate()) as nvarchar)+',时间过长,正在某处偷懒~~'
print @c
else
set @c='此人已进去,离刷卡进入的时间为'+cast(datediff(mi,@b,getdate()) as nvarchar)+',时间较短,可能刚偷懒回来~~'
print @c
楼主思路对的。。判断他一天内刷了几次卡。。偶数表示他出去了。基数表示在屋里。。没必要收他出去的记入,知道了记入,也不知道他在不在屋里。。我这详解。。
select @a=count(*) from InOut where 姓名='张三'
select @b=max(刷卡时间)from InOut where 姓名='张三'
if @a%2=0
set @c='此人已出去,出去时间为'+cast(datediff(mi,@b,getdate()) as nvarchar)+'分钟,时间过长,正在某处偷懒~~'
print @c
else
set @c='此人已进去,离刷卡进入的时间为'+cast(datediff(mi,@b,getdate()) as nvarchar)+'分钟,时间较短,可能刚偷懒回来~~'
print @c少了分钟两字。。哈哈。。