Sql server MSSQL中的登录查询

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

我对SQL查询有一个无法理解的问题。
我想知道当前登录到系统的用户。 记录系统的数据如下所示。
我的逻辑是,我需要找到具有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。我只添加了列,没有添加条件