Я хочу создать таблицу посещаемости, которую я получаю от машины для перфорации, например:
UID | Time
023 | 2019-01-29 20:06:53
023 | 2019-01-29 20:07:10
023 | 2019-01-29 20:22:05
123 | 2019-01-30 08:57:01
027 | 2019-01-30 09:14:14
023 | 2019-01-30 11:22:21
123 | 2019-01-30 18:35:53
027 | 2019-01-30 19:00:25
Теперь все записи в одной таблице, поэтому я хочу первую и последнюю запись пользователя и группы по дате, а затем получить разницу во времени из 2 значений
Мне нужен вывод, как это:
UID | In Time | Out Time | Time Diff.
023 | 2019-01-29 20:06:53 | 2019-01-29 20:22:05 | 00:18:00
027 | 2019-01-30 09:14:14 | 2019-01-30 19:00:25 | 10:00:00
123 | 2019-01-30 08:57:01 | 2019-01-30 18:35:53 | 10:00:00
Сначала я пытаюсь получить такие данные, но это не работает для меня
$select = mysqli_query ($db, "SELECT *, Min(Date) AS MinDate, Max(Date) AS MaxDate FROM demotable GROUP BY UID");
Вы можете использовать TIMEDIFF()
:
SELECT
UID,
Min(timecolumn) AS 'In Time',
Max(timecolumn) AS 'Out Time',
TIMEDIFF(Max(timecolumn), Min(timecolumn)) AS 'Time Diff'
FROM demotable
GROUP BY UID, DATE(timecolumn)
Для той же разницы во времени дня вы можете использовать группу по выражению. Что касается вашего output- того же дня без времени, то не показывайте, что row- для этого вы можете использовать предложение HAVING, проверив, что max (время) не равно min (время) для того же дня.
SELECT
UID,
Min(Time) AS 'In Time',
Max(Time) AS 'Out Time',
TIMEDIFF(Max(Time), Min(Time)) AS 'Time Diff'
FROM demo
GROUP BY UID, DATE(Time)
HAVING Max(Time) != Min(Time)
вы также можете увидеть работающую демку Демо на dbfiddle