Надо создать отчет типа учет рабочего времени
Модераторы: Naeel Maqsudov, C_O_D_E
а какое тогда условие join-a?
Блин. Похоже погорячился. Получается выбрать все пары, где время прихода меньше времени ухода (можно и без identity того же добиться), но вот пары типа
ВХОД ВЫХОД
8.00 18.01
явно лишние. Т.е. похоже без подзапроса не обойтись
ВХОД ВЫХОД
8.00 18.01
явно лишние. Т.е. похоже без подзапроса не обойтись

Даже самый дурацкий замысел можно воплотить мастерски
Злобный бред:
Код: Выделить всё
SELECT
e1.card,
e1.event_time,
e2.event_time
FROM events AS e1, events AS e2
WHERE
e1.card=e2.card
and e1.status =1
and e2.status =2
and e1.event_time < e2.event_time
and e2.event_time not in (select max (event_time) from events e4 where e4.card = e2.card)
union all
SELECT
e1.card,
e1.event_time,
e2.event_time
FROM events AS e1, events AS e2
WHERE
e1.card=e2.card
and e1.status =1
and e2.status =2
and e1.event_time < e2.event_time
and e1.event_time not in (select min (event_time) from events e3 where e3.card = e1.card)
Даже самый дурацкий замысел можно воплотить мастерски
Главное, запретить всем приходить на работу больше двух раз в день 
А join на саму себя, это хорошая мысль. Предлагаю так запрос:

А join на саму себя, это хорошая мысль. Предлагаю так запрос:
Код: Выделить всё
SELECT e1.card, e1.event_time, min(e2.event_time)
FROM
(
(SELECT * FROM events WHERE status=1) as e1 LEFT JOIN
(SELECT * FROM events WHERE status=2) as e2 ON e1.card=e2.card
)
WHERE e1.event_time < e2.event_time
GROUP BY e1.card, e1.event_time
ORDER BY e1.card, e1.event_time
Вся прелесть таких запросов будет ощущаться при выборке за год, и когда сотрудников за сотню перевалит.
Даже самый дурацкий замысел можно воплотить мастерски
Это точно. Но что характерно, если нужно подсчитать только рабочее время без вывода времен прихода/ухода, то запрос элементарный:
Код: Выделить всё
SELECT card, (sum(iif(status=2, event_time, 0))-sum(iif(status=1, event_time, 0))) as worktime
FROM events
GROUP BY card
Ввести в таблицу events для каждого сотрудника запись со временем выхода, например, 01-01-3456 (т.е. дата, которая не наступит в обозримом будущем), и при выводе (или в самом SQL запросе) заменять ее на <пусто>.