#php #mysql #sql #date #datetime
Вопрос:
У меня есть запрос на получение даты и времени выхода-1 день, но не для столбца флага в строке этого дня, а для текущей строки. это мой вопрос
SELECT clockin, clockout, flag FROM `attendance`
WHERE (`flag` IN ('A', 'AC'))
AND (`clockin` BETWEEN '2021-03-26' AND '2021-04-26')
AND (IF( DATE_FORMAT(clockout - INTERVAL 1 DAY, '%H:%i:%s') < '23:00:00'
-- my problem in this condition
AND (flag = 'A' || flag ='AC'),
((CAST(clockin AS time) > '08:15:01')), ((CAST(clockin AS time) > '12:15:01'))))
AND (CAST(clockin AS time) < '14:00:00')
ORDER BY `user_id`
Мне не хватает одного, в котором в условии я использую флаг в этой строке, а не флаг из строки (дата-1 день). как я могу получить флаг из строки (дата-1 день), которая не является текущей строкой?
Комментарии:
1. Используется
lag()
для доступа к предыдущему столбцу строки`2.
DATE_FORMAT(clockout - INTERVAL 1 DAY, '%H:%i:%s') < '23:00:00'
в этом нет никакого смысла. Вычтенные дни не могут изменить время .3. если я использую
lag()
этот доступ к предыдущей строке, но в таблице этого быть не может, потому что предыдущая строка может быть строкой из другого идентификатора пользователя. @Serg4. @RahmatHidayat, вы управляете разделением и упорядочением с помощью предложения over() функции окна dev.mysql.com/doc/refman/8.0/en/window-functions-usage.html
5. @serg спасибо, что это решено с помощью заказа по идентификатору пользователя и часам