Laravel SQL Проблема (я хочу указать время последнего и последнего времени от даты) - PullRequest
0 голосов
/ 23 января 2020

My SQL Табличные данные

UserID         Timestamp             EventTrigger
0000003   2019-08-27 08:57:23.000        IN
0000003   2019-08-27 09:07:23.000        OUT
0000003   2019-08-27 09:10:24.000        IN
0000003   2019-08-27 18:05:21.000        OUT

Я хочу сделать вывод как

UserID     Date         Last-IN         Last-OUT
 3      2019-08-27      09:10:24        18:05:21

Ответы [ 2 ]

0 голосов
/ 23 января 2020

надеюсь, что ваша проблема решится из этого запроса

create table temp(UserID varchar(20),        Timestamp datetime,            
 EventTrigger varchar(10))
 insert into temp values('0000003','2019-08-27 08:57:23.000' ,'IN')
 insert into temp values('0000003'   ,'2019-08-27 09:07:23.000'        ,'OUT') 
 insert into temp values('0000003'   ,'2019-08-27 09:10:24.000'        ,'IN')
 insert into temp values('0000003'   ,'2019-08-27 18:05:21.000'        ,'OUT')


 select I.UserID,cast(I.Timestamp as date) as Date,MAX(cast(case when I.EventTrigger 
 ='IN' then I.Timestamp END as time)) LastTimeIN
 ,MAX(cast(case when I.EventTrigger ='OUT' then I.Timestamp END as time)) LastTimeOut 
 from temp I
 group by I.UserID,cast(I.Timestamp as date)
 drop table temp
0 голосов
/ 23 января 2020

Как уже говорили другие, вам нужно быть немного более точным 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 ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...