Рассчитать / определить часы для Nightshift в mysql
1 ответ
Это один из способов. И будет работать день / ночь в любую смену, при условии, что первая min(datetime)
представлять IN
,
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
время.