Как уже говорили другие, вам нужно быть немного более точным c, чтобы люди могли давать хорошие ответы, но если вы просто хотите утверждение SQL, которое дает результат, который, я думаю, вы запрашиваете , тогда это должно сработать:
select
UserId,
[IN] as [Last-IN],
[OUT] as [Last-OUT]
from
(
select
convert(int,UserId) as UserID,
EventTrigger,
max([Timestamp]) as LastDate
from inout
group by UserId, EventTrigger
) SourceTable
PIVOT
(
max(LastDate)
for EventTrigger in ([IN],[OUT])
) as PivotTable
Это на основе определения вашей базовой таблицы и следующих данных:
create table inout
(
UserId varchar(10),
[Timestamp] datetime,
EventTrigger varchar(3)
)
insert into inout values
('000003','2019-08-27 08:57:23.000','IN'),
('000003','2019-08-27 09:07:23.000','OUT'),
('000003','2019-08-27 09:10:24.000','IN'),
('000003','2019-08-27 18:05:21.000','OUT')
Вы также можете достичь того же результата с подзапросы:
select distinct
convert(int,UserId) as UserID,
(select max([Timestamp]) from inout lastin where a.UserId = lastin.UserId and lastin.EventTrigger = 'IN') as [Last-IN],
(select max([Timestamp]) from inout lastout where a.UserId = lastout.UserId and lastout.EventTrigger = 'OUT') as [Last-OUT]
from inout a
Или, возможно, с помощью других методов, таких как самостоятельное соединение, или отдельных запросов для каждого значения EventTrigger ...