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.

Comments

  1. 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!

    Here 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!

    ReplyDelete
    Replies
    1. hey jason --

      i 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 ...

      Delete

Post a Comment