Невозможно повторно использовать выражение CASE
с псевдонимом, определенное в предложении select, в предложении WHERE
на том же уровне. Вот один обходной путь для того, что, я думаю, вы пытаетесь здесь сделать:
SELECT
CASE WHEN A.time BETWEEN '06:15:00' AND '11:59:00' THEN 'IN'
WHEN A.time BETWEEN '12:00:00' AND '23:59:00' THEN 'OUT'
WHEN A.time BETWEEN '00:00:00' AND '06:14:00' THEN 'OUT' END in_out,
A.no_reg,
A.date,
A.date_time AS time_in,
B.date_time AS time_out
FROM raw_attendance A
LEFT JOIN raw_attendance B
ON A.no_reg = B.no_reg AND
A.date_time < B.date_time AND
(B.time BETWEEN '00:00:00' AND '06:14:00' OR
B.time BETWEEN '12:00:00' AND '23:59:00')
WHERE
A.time BETWEEN '06:15:00' AND '11:59:00';
В этой версии вместо того, чтобы пытаться повторно использовать выражение CASE
, я просто включаю исходные проверки диапазона, которые определяли либо результат IN
или OUT
. Если вы действительно хотите повторно использовать выражение CASE
, вам, возможно, придется выполнить подзапрос.