在sql中分离同一表中的相关记录
我有一张桌子。有记录在sql中分离同一表中的相关记录,sql,sql-server,Sql,Sql Server,我有一张桌子。有记录 **UserLoginAuditID EmployeeID LoginAuditCodeID LoginDate** 538544 1795 96 2013-12-19 12:26:21.187 538512 1795 137 2013-12-19 11:02:20.527 538458
**UserLoginAuditID EmployeeID LoginAuditCodeID LoginDate**
538544 1795 96 2013-12-19 12:26:21.187
538512 1795 137 2013-12-19 11:02:20.527
538458 1795 96 2013-12-19 09:34:50.703
538249 1795 96 2013-12-18 13:34:41.923
538177 1795 96 2013-12-18 10:32:22.087
537944 1795 96 2013-12-17 13:08:47.860
537889 1795 96 2013-12-17 10:39:07.610
536560 1795 96 2013-12-11 14:29:54.703
536485 1795 137 2013-12-11 11:21:12.737
536401 1795 96 2013-12-11 08:34:46.183
534430 1795 96 2013-12-05 11:11:39.013
533942 1795 137 2013-12-04 12:18:03.497
LoginAuditCodeID 96表示登录,137表示注销
我想要相应的登录和注销的单独列表。
问题是存在多个登录。我们可以考虑登录前的登录记录,留下孤独的登录记录。
请帮帮我
我想要一个相应的登录和注销记录列表。
例如,在我上面给出的数据中
538512 1795 137 2013-12-19 11:02:20.527
538458 1795 96 2013-12-19 09:34:50.703
536485 1795 137 2013-12-11 11:21:12.737
536401 1795 96 2013-12-11 08:34:46.183
假设SQL Server是您的DBMS,我认为这将为您提供您想要的:
; WITH actions AS (
SELECT UserLoginAuditID
, EmployeeID
, LoginAuditCodeID
, LoginDate
, Row_Number() OVER (PARTITION BY EmployeeID ORDER BY LoginDate) As seq
FROM your_table
WHERE LoginAuditCodeID IN (96, 137)
)
SELECT logins.*
FROM actions As logins
INNER
JOIN actions As logouts
ON logouts.EmployeeID = logins.EmployeeID
AND logouts.seq + 1 = logins.seq
AND logins.LoginAuditCodeID = 96
AND logouts.LoginAuditCodeID = 137
请告诉我您的进展情况。您可以按如下方式获得相应的登录/注销:
select Login, Logout from
(
select UserLoginAuditID as Logout,
(select UserLoginAuditID from
(select UserLoginAuditID, row_number() over (order by L2.LoginDate desc) rn
from logtable L2
where LoginAuditCodeID = 96
and L2.LoginDate < L.LoginDate
and L2.EmployeeID = L.EmployeeID) Y where rn = 1
) Login
from logtable L where LoginAuditCodeID = 137
) X where not login is null
你说的是日期?如2013-12-19?您使用的是什么数据库管理系统?@Tosx:相应的登录和注销。您使用的是Microsoft SQL Server吗?还是MySQL?还是甲骨文?或者其他数据库管理系统?我正在使用SQL Server。@user2087180 SQL Server?谢谢您的回复。但它不起作用。要找到相应的登录和注销,我们必须考虑日期,我认为。我在DNMS中没有那么强。编辑考虑日期和SQL Server,看看它是否工作得更好。谢谢,非常感谢新年快乐如果答案对你有效,请将其标记为已接受。新年快乐!