У меня есть фабричная система сбора (времени) труда, которая отслеживает время рабочих и рабочие места, над которыми они работают. В этом конкретном случае я пытаюсь определить, кто забыл провести, основываясь на типе ВКЛ / ВЫКЛ последнего свайпа каждого работника в таблице данных. Рассмотрим трех рабочих, Джона, Мэтта и Шона. Их дни начинаются в 5:30 утра. Вот некоторые игровые данные:
create table johnmtest (empl_ID varchar(5), ONOFF varchar(2), TSTAMP DATETIME);
insert into jmtest (empl_ID, ONOFF, TSTAMP) values ('JOHNM', 'ON', '2020-01-15 05:31:06');
insert into jmtest (empl_ID, ONOFF, TSTAMP) values ('SEANW', 'ON', '2020-01-15 05:33:17');
insert into jmtest (empl_ID, ONOFF, TSTAMP) values ('MATTD', 'ON', '2020-01-15 05:35:31');
insert into jmtest (empl_ID, ONOFF, TSTAMP) values ('SEANW', 'OF', '2020-01-15 13:07:41');
insert into jmtest (empl_ID, ONOFF, TSTAMP) values ('JOHNM', 'OF', '2020-01-15 14:15:29');
insert into jmtest (empl_ID, ONOFF, TSTAMP) values ('JOHNM', 'ON', '2020-01-15 14:21:11');
insert into jmtest (empl_ID, ONOFF, TSTAMP) values ('MATTD', 'OF', '2020-01-15 15:01:27');
insert into jmtest (empl_ID, ONOFF, TSTAMP) values ('MATTD', 'ON', '2020-01-15 15:15:48');
Итак, мы видим, что Джон включил свой первый рабочий заказ в 5:31 утра, Мэтт начал в 5:35, а Шон начал в 5:33. Это все «ВКЛ», парни работают, часы работают.
- В течение дня Джон заканчивает (ударил) свое первое рабочее поручение в 14:15 (OF), взял несколько минут перерыва и включил второе рабочее поручение в 14:21. Он активно работает.
- То же самое с Мэттом. Мэтт работает над своим первым заказом с 5:35 до 15:01 (ON и OF). Он берет небольшой перерыв и начинает свой второй рабочий заказ в 15:15. Он также активно работает.
- Но проблема в Шоне. В 5:33 Шон провел по своему первому заказу, а в 13:07 - по OF. Я смотрю на заводской цех и вижу Шона, работающего на буровом прессе, но его самым последним ударом по времени был провал (OF). Это означает, что он физически работает, но его не регистрируют для записи времени.
Поэтому я пытаюсь выполнить GROUP BY каждого сотрудника с его МАКСИМАЛЬНЫМ временем. Это просто с
select empl_ID, max(TSTAMP) from jmtest GROUP BY empl_ID
Но мне нужно каким-то образом вставить туда столбец ONOFF , чтобы я мог видеть, был ли последний раз проведением сотрудника ON или OF. Я пытаюсь добраться до этого:
empl_ID ONOFF TSTAMP
------- ----- ------
SEANW OF 2020-01-15 13:07:41
JOHNM ON 2020-01-15 14:21:11
MATTD ON 2020-01-15 15:15:48
На самом деле, мы намереваемся перенести эти данные на большие телевизионные дисплеи на заводском этаже, чтобы супервизоры могли видеть, кто не был включен. В этом случае, я надеюсь, что дополнительное предложение WHERE только из строк OF уменьшит список до следующего:
empl_ID ONOFF TSTAMP
------- ----- ------
SEANW OF 2020-01-15 13:07:41
Тогда Наблюдатели могут go найти Шона и кричать на него. Звучит просто, если посмотреть на пол и сравнить со списком данных, там 400 парней. Итак, было бы очень полезно только отображение записи OF.
Можно ли выполнить какую-либо группировку, которая затем включается в столбец ON / OF для полной картины? Или двухуровневый запрос? Спасибо, Джон