我有一张这样的表:
ID | username | domain | operation| datetime
---+----------+--------+----------+--------------------
1 | john | depA | 'login' | 2012-09-22 13:00:00
2 | mary | depA | 'login' | 2012-09-22 13:10:00
3 | john | depA | 'login' | 2012-09-24 13:25:00
4 | john | depA | 'logout' | 2012-09-24 13:55:00
我想在过去20小时(日期时间)内获取(SELECT DISTINCT)
所有“用户名,域名”,其最后一次操作是登录(最后没有注销)。
这个想法是让“目前所有用户都参加会议。”
我希望只在一个查询中处理结果。
请问任何想法?我找不到用T-SQL获取结果的方法。
答案 0 :(得分:2)
您可以使用公用表表达式来过滤日期,然后在查询中使用它两次以获取每个用户的最新活动:
;WITH RecentLogins AS
(SELECT username, operation, logdate
FROM logins
WHERE logdate >= DATEADD(hh, -20, GETDATE()))
SELECT r1.*
FROM RecentLogins r1
WHERE logdate = (
SELECT MAX(logdate)
FROM RecentLogins r2
WHERE r1.username = r2.username AND r1.domain = r2.domain)
AND operation = 'login'
答案 1 :(得分:0)
您可以使用DATEADD
功能,只需使用负号。
SELECT DISTINCT username, domain FROM table_name
WHERE operation = 'login' AND datetime >= DATEADD(Hour, -20, CURRENT_TIMESTAMP)