Iam尝试进行查询以检查用户是否已登录。 数据存储为2个单独的行,一个称为“in”,当用户登录而另一个“out”时。然后我需要找到所有当前登录但未注销的人。所以我试过比较两个选择语句。这给了我当前登录但未出局的所有人的姓名(UNILOGIN):
select UNILOGIN from timereg where date = CONVERT(DATE,GETDATE(),110) and CHECKEDIN = 'IND'
except
select UNILOGIN from timereg where date = CONVERT(DATE,GETDATE(),110) and CHECKEDIN = 'UD'
然后我需要在他们签入时找到他们的前1次。如何在一个查询字符串中生成一个可以得到结果的语句?如果可能的话。类似的东西:
SELECT TOP 1 UNILOGIN, TIME from TIMEREG where UNILOGIN = "result of query"
告诉我是否需要详细说明。
答案 0 :(得分:2)
骨料。每unilogin
获得一个结果行,确保它有一个'IND'记录而没有'UD'记录,并选择相关日期的最长登录时间。
select unilogin, max(time)
from timereg
where date = convert(date, getdate(), 110)
and checkedin in ('IND', 'UD')
group by unilogin
having count(case when checkedin = 'IND' then 1 end) > 0
and count(case when checkedin = 'UD' then 1 end) = 0;