sql query for top user of a computer
this pulls data from the v_gs_system_console_user table to determine who the top user is. there’s a drawback to the asset intelligence method of gathering this information that’s presented in the v_gs_system_console_usage table in that if you have applications running as service accounts performing logins, they may show up as the top user.
declare @machine nvarchar(50) set @machine = 'myComputerName' select top 1 sys.name0 as 'name', usr.systemconsoleuser0 as 'user', usr.numberofconsolelogons0 as '# logons', usr.totaluserconsoleminutes0 as '# mins' from v_r_system sys inner join v_gs_system_console_user usr on sys.resourceid = usr.resourceid where sys.name0 like @machine order by usr.totaluserconsoleminutes0 desc
and something for fun, i gathered from this post. if you want the second most active or top user, then you’d run the query like this:
declare @machine nvarchar(50) set @machine = 'myComputerName' select top 1 * from ( select top 2 sys.name0 as 'name', usr.systemconsoleuser0 as 'user', usr.numberofconsolelogons0 as '# logons', usr.totaluserconsoleminutes0 as '# mins' from v_r_system sys inner join v_gs_system_console_user usr on sys.resourceid = usr.resourceid where sys.name0 like @machine order by usr.totaluserconsoleminutes0 desc ) as temp order by [# mins] asc
depending on whether you want to track this by the numberofconsolelogons0 field or the totaluserconsoleminutes0 field, you would simply change the order by [field] asc/desc expression.
Hi! I came across your blog post trying to figure out a similar report request I have. I need a list of all systems and their TOP user, not a single system. I have tried using the "Select Top 1" subquery but this doesn't seem to work very well and I'm still pretty new to SQL queries so I probably screwed it up. :) Anyway, any help would be very much appreciated!
ReplyDeleteHere is my current query (it looks for a specific collection ID from SCCM, you can ignore this part!)
-------------------------------------
select
Sys.Name0 AS [Computer Name],
RIGHT((select top 1 (ConsoleUser.SystemConsoleUser0) from v_GS_SYSTEM_CONSOLE_USER),CHARINDEX('\',REVERSE(ConsoleUser.SystemConsoleUser0))-1) AS [Most Frequent User],
Sys.Resource_Domain_OR_Workgr0 AS [Domain],
Sys.AD_Site_Name0 AS [AD Site]
from
v_FullCollectionMembership AS FullColl
LEFT JOIN v_R_System AS Sys ON FullColl.ResourceID = Sys.ResourceID
LEFT JOIN v_GS_SYSTEM_CONSOLE_USER AS ConsoleUser ON Sys.ResourceID = ConsoleUser.ResourceID
where
ConsoleUser.SystemConsoleUser0 not like '%sx%' AND
FullColl.CollectionID = '00000039'
order by Sys.Name0 asc
---------------------------------------------
Thanks!
hey jason --
Deletei haven't tried this yet... but if you examine my query above, you'll see the query is looking for whatever matches "like" @machine. so... you should be able to provide it a value like...
set @machine = ''
(two single quotes ^ there)
that should tell the query to match anything. see what you get ...