27,579
社区成员
发帖
与我相关
我的任务
分享
SELECT d.Name AS [用户组],
b.RealName AS [用户名称],
ROW_NUMBER() OVER (PARTITION BY b.Ucf_UserID,CONVERT(VARCHAR(10),LogonTime,120) ORDER BY LogonTime) AS [日登陆顺序],
a.LogonTime AS [登录时间],
a.LogoutTime AS [退出时间],
CONVERT(TIME,a.LogoutTime - a.LogonTime) AS [持续时间],
CONVERT(TIME,DATEADD(ss,SUM(DATEDIFF(ss,a.LogonTime,a.LogoutTime)) OVER (PARTITION BY b.Ucf_UserID,CONVERT(VARCHAR(10),LogonTime,120) ),0)) [日使用总时间]
FROM Sys_LogonLog a
INNER JOIN Ucf_User b ON a.UserID = b.Ucf_UserID
INNER JOIN Sys_UserRole c ON b.Ucf_UserID = c.UserID
INNER JOIN Sys_Role d ON c.RoleID = d.RoleID
WITH Ta
AS
(
SELECT
a.Name as 用户组
,c.Name as 用户名
,d.IP
,ROW_NUMBER()OVER(PARTITION BY c.UserID,CONVERT(VARCHAR(10),d.LoginTime,120) ORDER BY d.LoginTime) AS LoginRank
,CONVERT(VARCHAR(10),d.LoginTime,120) AS DDay
,d.LoginTime
,d.LogoutTime
,DATEDIFF(ss,d.LoginTime,d.LogoutTime) AS TotalTime
,e.DDTotalTime
FROM Sys_Role as a
inner join Sys_UserRole as b on a.RoleID=b.RoleID
inner join Ucf_User as c on c.UserID=b.UserID
LEFT join Sys_LoginLog as d on d.Usf_UserID=c.UserID
CROSS APPLY(SELECT SUM(DATEDIFF(ss,d.LoginTime,d.LogoutTime)) FROM Pub_LoginTime WHERE UserID=d.UserID AND DATEDIFF(dd,LoginTime,d.LoginTime)=0)e(DDTotalTime)
)
SELECT 用户组
,用户名
,'第'+RTRIM(LoginRank)+'次' AS LoginRank2
,IP
,LoginTime
,LogoutTime
,RTRIM(TotalTime/3600)+':'+RTRIM(TotalTime%3600/60)+':'+RTRIM(TotalTime%60) AS TotalTime
,RTRIM(DDTotalTime/3600)+':'+RTRIM(DDTotalTime%3600/60)+':'+RTRIM(DDTotalTime%60) AS DDTotalTime
FROM Ta
ORDER BY 用户名,DDay,LoginRank DESC
WITH Ta
AS
(
SELECT
a.Name as 用户组
,c.Name as 用户名
,d.IP
,ROW_NUMBER()OVER(PARTITION BY c.UserID,CONVERT(VARCHAR(10),d.LoginTime,120) ORDER BY d.LoginTime) AS LoginRank
,CONVERT(VARCHAR(10),d.LoginTime,120) AS DDay
,d.LoginTime
,d.LogoutTime
,DATEDIFF(ss,d.LoginTime,d.LogoutTime) AS TotalTime
,e.DDTotalTime
FROM Sys_Role as a
inner join Sys_UserRole as b on a.RoleID=b.RoleID
inner join Sys_User as c on c.UserID=b.UserID
LEFT join Sys_LoginLog as d on d.Usf_UserID=c.UserID
CROSS APPLY(SELECT SUM(DATEDIFF(ss,d.LoginTime,d.LogoutTime)) FROM Pub_LoginTime WHERE UserID=d.UserID AND DATEDIFF(dd,LoginTime,d.LoginTime)=0)e(DDTotalTime)
)
SELECT 用户组
,用户名
,'第'+RTRIM(LoginRank)+'次' AS LoginRank2
,IP
,LoginTime
,LogoutTime
,RTRIM(TotalTime/3600)+':'+RTRIM(TotalTime%3600/60)+':'+RTRIM(TotalTime%60) AS TotalTime
,RTRIM(DDTotalTime/3600)+':'+RTRIM(DDTotalTime%3600/60)+':'+RTRIM(DDTotalTime%60) AS DDTotalTime
FROM Ta
ORDER BY 用户名,DDay,LoginRank DESC
WITH Ta
AS
(
SELECT
a.Name as 用户组
,c.Name as 用户名
,d.IP
,ROW_NUMBER()OVER(PARTITION BY c.UserID,CONVERT(VARCHAR(10),d.LoginTime,120) ORDER BY d.LoginTime) AS LoginRank
,CONVERT(VARCHAR(10),d.LoginTime,120) AS DDay
,d.LoginTime
,d.LogoutTime
,DATEDIFF(ss,d.LoginTime,d.LogoutTime) AS TotalTime
,e.DDTotalTime
FROM Sys_Role as a
inner join Sys_UserRole as b on a.RoleID=b.RoleID
inner join Sys_User as c on c.UserID=b.UserID
LEFT join Sys_LoginLog as d on d.Usf_UserID=c.UserID
CROSS APPLY(SELECT SUM(DATEDIFF(ss,d.LoginTime,d.LogoutTime)) FROM Pub_LoginTime WHERE UserID=d.UserID AND DATEDIFF(dd,LoginTime,d.LoginTime)=0)e(DDTotalTime)
)
SELECT 用户组
,用户名
,'第'+RTRIM(LoginRank)+'次' AS LoginRank2
,IP
,LoginTime
,LogoutTime
,RTRIM(TotalTime/3600)+':'+RTRIM(TotalTime%3600/60)+RTRIM(TotalTime%60) AS TotalTime
,RTRIM(DDTotalTime/3600)+':'+RTRIM(DDTotalTime%3600/60)+RTRIM(DDTotalTime%60) AS DDTotalTime
FROM Ta
ORDER BY 用户名,DDay,LoginRank DESC
with cte as
(
select
UserID,
IP,
LogonTime,
LogoutTime,
DATEDIFF(SECOND, LogonTime, LogoutTime) as timediff,
sum(DATEDIFF(SECOND, LogonTime, LogoutTime)) over (partition by UserID, CONVERT(varchar(100), LogonTime, 111)) as total,
ROW_NUMBER() over (partition by UserID, CONVERT(varchar(100), LogonTime, 111) order by LogonTime desc) as rowid
from Sys_LogonLog
)
select d.Name,
b.RealName,
a.IP,
a.LogonTime,
a.LogoutTime,
cast(floor(a.timediff / 3600) as varchar) + ':' + cast(floor(a.timediff % 3600 / 60) as varchar) + ':' + cast(floor(a.timediff % 3600 % 60) as varchar) as timediff,
cast(floor(a.total / 3600) as varchar) + ':' + cast(floor(a.total % 3600 / 60) as varchar) + ':' + cast(floor(a.total % 3600 % 60) as varchar) as total,
'第' + cast(rowid as varchar) + '次' as rowid
from cte a
inner join Ucf_User b on a.UserID = b.Ucf_UserID
inner join Sys_UserRole c on a.UserID = c.UserID
inner join Sys_Role d on c.RoleID = d.RoleID
with cte as
(
select
UserID,
IP,
LogonTime,
LogoutTime,
DATEDIFF(SECOND, LogonTime, LogoutTime) as timediff,
sum(DATEDIFF(SECOND, LogonTime, LogoutTime)) over (partition by UserID, CONVERT(varchar(100), LogonTime, 111)) as total,
ROW_NUMBER() over (partition by UserID, CONVERT(varchar(100), LogonTime, 111) order by LogonTime desc) as rowid
from Sys_LogonLog
)
select d.Name,
b.RealName,
a.IP,
a.LogonTime,
a.LogoutTime,
cast(floor(timediff / 3600) as varchar) + ':' + cast(floor(timediff % 3600 / 60) as varchar) + ':' + cast(floor(timediff % 3600 % 60) as varchar) as per,
sum(DATEDIFF(MINUTE, a.LogonTime, a.LogoutTime)) over (partition by a.UserID, CONVERT(varchar(100), a.LogonTime, 111)) as total,
'第' + cast(ROW_NUMBER() over (partition by a.UserID, CONVERT(varchar(100), a.LogonTime, 111) order by a.LogonTime desc) as varchar) + '次' as rowid
from cte a
inner join Ucf_User b on a.UserID = b.Ucf_UserID
inner join Sys_UserRole c on a.UserID = c.UserID
inner join Sys_Role d on c.RoleID = d.RoleID
select * from Sys_LogonLog --登录记录表 UserID:用户ID,LogonTime:登录时间,IP:IP地址,LogoutTime:退出时间
select * from Ucf_User --用户表 Ucf_UserID:用户ID,RealName:用户名称
select * from Sys_Role --用户组表 RoleID:用户组ID,Name:用户组名称
select * from Sys_UserRole --用户和用户组关联表 UserID:用户ID,RoleID:用户组ID
--关联的字段表后面注释都有,这个数据就没办法造了,你们写出来我测测吧