Рассчитать / определить часы для Nightshift в mysql

Вот таблица для журналов сотрудника:

журналы работника

И что я хочу, чтобы генерировать время и время сотрудников. как это:

время от времени

Может ли кто-нибудь помочь мне в этом? Любая добавленная логика или алгоритм будут приняты.

1 ответ

Это один из способов. И будет работать день / ночь в любую смену, при условии, что первая min(datetime) представлять IN,

Rextester Образец

select  t.enno
        ,max(datetime) as time_out
        ,min(datetime) as time_in
        ,time_to_sec(timediff(max(datetime), min(datetime) )) / 3600 
            as No_of_hours
from 
(
    SELECT
    floor(@row1 := @row1 + 0.5) as day,
    t.*
    FROM Table4356 t,
     (SELECT @row1 := 0.5) r1
    order by t.datetime
) t
group by t.day,t.enno
;

Выход

+------+---------------------+---------------------+-------------+
| enno |      time_out       |       time_in       | No_of_hours |
+------+---------------------+---------------------+-------------+
|    6 | 16.05.2017 06:30:50 | 15.05.2017 18:30:50 |     12,0000 |
|    6 | 17.05.2017 05:30:50 | 16.05.2017 18:10:50 |     11,3333 |
+------+---------------------+---------------------+-------------+

Объяснение:

    SELECT
    floor(@row1 := @row1 + 0.5) as day,
    t.*
    FROM Table4356 t,
     (SELECT @row1 := 0.5) r1
    order by t.datetime

Этот запрос использует последовательность для увеличения @row1 с 0.5так вы получите 1 1.5 2 2.5, Теперь, если вы просто получите целую часть с с floor, вы будете генерировать secece как 1 1 2 2, Так что этот запрос даст вам этот вывод

+-----+------+---------------------+
| day | enno |      datetime       |
+-----+------+---------------------+
|   1 |    6 | 15.05.2017 18:30:50 |
|   1 |    6 | 16.05.2017 06:30:50 |
|   2 |    6 | 16.05.2017 18:10:50 |
|   2 |    6 | 17.05.2017 05:30:50 |
+-----+------+---------------------+

Теперь вы можете группировать по day и получить max а также min время.

Другие вопросы по тегам