2015-03-22 1 views
0

Мне нужно получить разницу в датах между двумя моментами двух разных строк. Я попытался манипулировать идентификаторами этой таблицы, но нашел тупик.как мне сопоставить значения, чтобы их сравнить

таблица выглядит следующим образом:

ID  TimeIn  TimeOut  EmpId 
1  8.30am  12.30pm  usr1 
2  1.30pm  5.30pm  usr1 

мне нужно, чтобы получить разницу во времени между TimeOut первой строки и Timein второго ряда.

Ожидаемый результат должен быть таким:

EmpId LunchTime
usr1 1:00

1:00 эквивалентно 1 час.

+0

В зависимости от того, поддерживает ли ваша база данных, используйте функцию LAG. – Randy

+0

@ Randy, функция LAG? никогда не слышал об этом. В настоящее время я использую Sql Server. –

+0

что вы пробовали? –

ответ

0

Я подозреваю, что вы действительно спрашиваете: «Как мне сопоставить значения, чтобы их сравнить». Сравнение тривиально, если у вас есть оба значения, но совпадение пар строк является менее простым. Ознакомьтесь с этой статьей для почти точного пошагового шага о том, как решить что-то вроде этого: https://www.simple-talk.com/sql/t-sql-programming/solving-complex-t-sql-problems,-step-by-step/

+0

Спасибо Тим! Обязательно прочитайте эту статью. –

0

Ниже приведен мой код и протестируйте его в MYSQL для справки.

//EMP table content like below 
id TimeIn    TimeOut    EmpId 
1 2015-03-21 09:00:00 2015-03-21 12:30:00 usr1 
2 2015-03-21 13:30:00 2015-03-21 17:30:00 usr1 
3 2015-03-21 08:00:00 2015-03-21 13:30:00 usr2 
4 2015-03-21 14:00:00 2015-03-21 16:00:00 usr2 
// find every empId TimeOut of first row and TimeIn of second row 
SELECT id,TimeOut ,EmpId, 
(select c.TimeIn from EMP c where c.EmpId = a.EmpId and c.id > a.id limit 1) as 'TimeIn' 
from EMP a 
//result as below 
1 2015-03-21 12:30:00 usr1 2015-03-21 13:30:00 
2 2015-03-21 17:30:00 usr1 NULL 
3 2015-03-21 13:30:00 usr2 2015-03-21 14:00:00 
4 2015-03-21 16:00:00 usr2 NULL 
//find the timediff between TimeIn and TimeOut 
select id,EmpId,timediff(TimeIn,TimeOut) as diff from 
(
    SELECT id,TimeOut ,EmpId, 
    (select c.TimeIn from EMP c where c.EmpId = a.EmpId and c.id > a.id limit 1) as 'TimeIn' 
    from EMP a 
) as tmp 
// result as below 
id EmpId diff 
1 usr1 01:00:00 
2 usr1 NULL 
3 usr2 00:30:00 
4 usr2 NULL 

Надеюсь, это может вам помочь.

+0

Спасибо @Cherry !! –