Sql server MSSQL中的登录查询
我对SQL查询有一个无法理解的问题。Sql server MSSQL中的登录查询,sql-server,sql-server-2012,Sql Server,Sql Server 2012,我对SQL查询有一个无法理解的问题。 我想知道当前登录到系统的用户。 记录系统的数据如下所示。 我的逻辑是,我需要找到具有Action_type=51但没有Action_type=52或Action_type=53的名称 我尝试了很多不同的查询,但都没有得到我需要的信息。 这是我的桌子: 登录表 |ID |Action_type | Date_time | Name | | 1|51 |2017-11-06 17:13
我想知道当前登录到系统的用户。 记录系统的数据如下所示。
我的逻辑是,我需要找到具有Action_type=51但没有Action_type=52或Action_type=53的名称 我尝试了很多不同的查询,但都没有得到我需要的信息。
这是我的桌子: 登录表
|ID |Action_type | Date_time | Name |
| 1|51 |2017-11-06 17:13:55.227 | John |
| 2|51 |2017-11-06 17:16:00.331 | Mary |
| 3|53 |2017-11-06 17:45:55.227 | John |
| 4|52 |2017-11-06 18:33:15.727 | Mary |
| 5|51 |2017-11-07 10:13:49.558 | John |
| 6|51 |2017-11-07 11:43:08.691 | Bonnie |
动作类型由51-登录
52-注销
53-注销(超时) ////编辑:
Select * From login_table lt
Where date_time = (Select Max(date_time)
From login_table
Where action_type = action_type and action_type=51)
这就是我想出来的,但这并不是我想要的,因为它只返回最后一个(max),但我仍然不知道现在如何显示所有的connect用户 使用
样本数据:
CREATE TABLE #login_table( ID INT, Action_type INT, Date_time DATETIME, Name VARCHAR( 20 ))
INSERT INTO #login_table
VALUES
( 1,51,'2017-11-06 17:13:55.227', 'John ' ),
( 2,51,'2017-11-06 17:16:00.331', 'Mary ' ),
( 3,53,'2017-11-06 17:45:55.227', 'John ' ),
( 4,52,'2017-11-06 18:33:15.727', 'Mary ' ),
( 5,51,'2017-11-07 10:13:49.558', 'John ' ),
( 6,51,'2017-11-07 11:43:08.691', 'Bonnie ' ),
( 6,53,'2017-11-09 11:43:08.691', 'Bonnie ' )
查询应如下所示:
SELECT *
FROM
(
SELECT *, ( CASE WHEN LEAD(Action_type,1, 0) OVER( PARTITION BY Name ORDER BY Date_time ) IN( 52, 53 ) THEN 'LoggedOff' ELSE 'LoggedIn' END ) AS UserStatus
FROM #login_table
) AS a
WHERE UserStatus = 'LoggedIn'
AND Action_Type = 51
-- Optional cut off filter
-- AND Date_time > DATEADD( DAY, -1, GETDATE())
输出:
ID Action_type Date_time Name UserStatus
----------- ----------- ----------------------- -------------------- ----------
5 51 2017-11-07 10:13:49.557 John LoggedIn
这是家庭作业问题吗?无论如何,你需要看看函数。嗨,亚历克斯。不,这不是家庭作业问题。我需要该查询的结果在之后自动发送到我的电子邮件。Mary在2017-11-06 17:16:00.331登录,2017-11-06 18:33:15.727退出,因此她当前未登录,除非我失踪something@Zulatin,谢谢你发现这个。我在
中添加了和ActionType=51
,在中我测试了它,它返回了250多行,可以追溯到10月份。它按用户显示所有登录。不幸的是,它现在对我没有帮助。谢谢你抽出时间!如果您将actiontype添加到内部查询中,那么在您给我们的小样本中,它对我很有用。您是否包含该部分?@Alex如果我只在外部部分添加actiontype=51,它将被标记为错误的语法,因为它缺少列actiontype。我只添加了列,没有添加条件