Задать вопрос
  • Как составить запрос Tsql на отбор нахождение пользователя на рабочем месте?

    @NickelFace Автор вопроса
    select  u.[User_Id] , [Name] , [state] , [date] 
    from [USER] u
    join (
    --соединим полученный результат с ФИО
    select tt.User_Id , isnull([state], 2) [state], [date]
    -- выбираем всех пользователей ,а значения нал заменим на 2
    from
    (
    select e.User_Id ,min(Event_id) as [state], [date]
    from EVENTS e
    join
    (
    select max([Num]) num,Computer_Id
     from EVENTS
     group by Computer_Id
     ) t1 on 
     t1.num = e.Num
     where User_Id is not null
     group by  e.User_Id , [date]
     --Последние действие пользователя если был вход или выход
    
    
     union 
     ---------------------------------------Последнее действие на компьютере пользователя и компьютера 
    select  User_Id , Ev_id , dt
    from
    ( 
     select  num as num1, e.Computer_Id as CID, [USER_ID] as Us_id ,Event_Id as Ev_id , Date as dt
    from EVENTS e
    join
    (
     select max(num) nam,Computer_Id
     from EVENTS
     group by Computer_Id
     ) t2 on 
     t2.nam = e.Num
      where User_Id is null
    
    ) as
       tnull
      inner join
      (
    
     select  e.Num , e.Computer_Id , e.User_Id , Event_Id , [Date]
    from EVENTS e
    join
    (
      select max(num) num,User_Id 
      from EVENTS
      where User_Id is not null
      group by User_Id 
     
      ) muser on 
      muser.num = e.Num
     --order by Computer_Id
    
      ) as euser on
      euser.Computer_Id = tnull.CID
    --Последние дествие на компьютере выкл/вкл ПК и пред действие пользователя на этом ПК(выход) ,но выводим только Пользователя и текущий статус ПК
    ) tt1
    
    -----------------------------------------------------
    right join
    
    (
    Select u.[User_Id]  
     from [USER] u) tt on 
     tt.User_Id = tt1.User_Id
    --выявляем оставшихся пользователей (те кто не попали будут со значением NULL)
    ) t1 on t1.User_Id = u.User_Id
    Ответ написан
    Комментировать