У меня есть таблицы, содержащие следующие поля, среди прочего, в приложении для транспортной компании ...
jempe_users
+------------------------------+
| Field |
+------------------------------+
| user_id |
| user_user_group_id |
| user_type |
| user_real_name |
| user_drv_code |
+------------------------------+
jempe_user_types:
+---------------------+
| Field |
+---------------------+
| user_type_id |
| user_type_name |
+---------------------+
employee_clock_events:
+-----------------------+
| Field |
+-----------------------+
| ece_id |
| ece_employee_id |
| ece_type |
| ece_datetime |
| ece_active |
+-----------------------+
Что мне нужно сделать, это предложить три водителя, которые в настоящее время работают, а не в перерыве, которые могут быть назначены назабрать пациента.
Таблицы jempe_users содержат сотрудников, а также некоторых клиентов транспортной компании.В таблице типов пользователей есть запись, в которой user_type_name = driver и поле user_type в таблице jempe_users ссылаются на таблицу jempe_user_types.
Таблица employee_clock_events используется для включения и выключения сотрудников во время их смены.Поле ece_type является enum ('shift_start', 'shift_brake', 'shift_resume', 'shift_stop').В поле ece_datetime хранится временная отметка времени, когда произошло событие сдвига.
Итак, мне нужно найти типы пользователей драйверов в user_group 16, 17 или 18, которые работают в данный момент и кто является последним сдвигом ece_typeэто 'shift_start' или 'shift_resume'.
Я пробовал десятки вариантов из нижеперечисленного, но, похоже, не могу выбрать сотрудников, которые В настоящее время работают.Кажется, у меня нет проблем с отобранными сотрудниками, которые хотя бы когда-то работали сегодня.
Пробовал варианты этого ...
SELECT user_id, driver_name, driver_code
FROM
(
SELECT
u.user_id AS user_id,
u.user_real_name AS driver_name,
u.user_drv_code AS driver_code,
e.ece_type AS event_type,
e.ece_datetime AS event_datetime
FROM employee_clock_events AS e
INNER JOIN jempe_users AS u
ON e.ece_employee_id = u.user_id
LEFT JOIN jempe_user_types AS ut
ON u.user_type = ut.user_type_id
WHERE
e.ece_shift_date = '2011-09-13'
AND ut.user_type_name = 'driver'
AND u.user_user_group_id IN (16, 17, 18)
AND NOT ISNULL(u.user_drv_code)
AND u.user_active = 1
) AS TEMPORARY
GROUP BY user_id
HAVING MAX(event_datetime)
И это ...
SELECT u.user_id AS user_id, u.user_real_name AS driver_name, u.user_drv_code AS driver_code, MAX(e.ece_datetime) AS current_event_datetime
FROM employee_clock_events AS e
LEFT JOIN jempe_users AS u
ON e.ece_employee_id = u.user_id
LEFT JOIN jempe_user_types AS ut
ON u.user_type = ut.user_type_id
WHERE
(e.ece_type = 'shift_start' OR e.ece_type = 'shift_resume')
AND e.ece_shift_date = '2011-09-13'
AND ut.user_type_name = 'driver'
AND u.user_user_group_id IN (16, 17, 18)
AND NOT ISNULL(u.user_drv_code)
AND u.user_active = 1
GROUP BY e.ece_employee_id
Куда я иду не так?Спасибо за помощь.