preguntas de la entrevista de mysql preguntas de práctica

Tema: 1. Tema: escriba una oración de consulta, parámetro de entrada: fecha (fecha) y el formulario de salida es el siguiente:

Inserte la descripción de la imagen aquí

Pregunta: crear tabla work_plan
(
worker_name varchar (10), --person start_date
date, --start date
end_date date,
--end date sign_time varchar (10) --tiempo requerido para registrarse durante el período de envío
)

insertar en los valores del plan de trabajo
('Zhang San', '2020-01-01', null, '06: 30 '),
(' Li Si ',' 2020-02-01 ',' 2020-02-15 ',' 07:00 '),
(' Wang Wu ',' 2019-12-29 ',' 2020-03-30 ',' 06:00 '),
(' Zhao Liu ',' 2019-12-29 ',' 2020-03-30 ',' 06:00 ')

crear tabla sign_log
(
nombre_trabajador varchar (10),
sign_time datetime
)
insertar en los valores sign_log
('Zhang San', '2020-02-16 04:01'),
('Zhang San', '2020-02-16 05:02 '),
(' Zhang San ',' 2020-02-16 06:03 '),
(' Wang Five ',' 2020-02-16 07:03 '),
(' Wang Five ',' 2020-02- 16 08:03 '),
(' Wang Wu ',' 2020-02-16 09:03 ')

1. Significa que alguien trabajará como se requiere desde el comienzo del día hasta el final del día. La hora de registro diario durante el período de envío debe ser anterior a la "hora de servicio requerida" (incluida la hora requerida, precisa al minuto), o llegar tarde.
Por ejemplo:
si se requieren las 7:00, las 6:59 o 7:00:59 no se considerarán tarde; las 7:01 se considerarán como 1 minuto tarde

2. La "
Fecha de finalización de la asignación " en la línea 1 es nula, lo que significa que la hora de finalización del trabajo de la persona aún no se ha determinado y todavía está moviendo ladrillos; la fecha de finalización de la asignación en la línea 2 es 2020-02-15, que significa que el trabajador es enviado el 02- Finalizado el día 15.

3. Suponiendo que el nombre del empleado no se repite, solo hay una información de despacho por persona. La
hoja de registro de marcación generará un registro
cada vez que un empleado presione su huella digital para asistir a la asistencia. Nota: 1. 2020-02-16 El período de construcción de Li Sipai ha finalizado y no está en el período de envío. No es necesario calcular la asistencia, por lo que no es necesario mostrar 2. Zhao Liu no se registró ese día y se consideró que llegó tarde. El tiempo de retraso es de 1440 minutos. Respuesta:




#################答案##################
SELECT a.worker_name,a.sign_time,DATE(b.sign_time) sign_date,MIN(TIME(b.sign_time)) SIGNED,
CASE WHEN b.sign_time IS NULL OR CONCAT('2020-02-16',' ',a.sign_time)<MIN(b.sign_time) 
THEN '是' ELSE '否' END isLate,
CASE WHEN b.sign_time IS NULL THEN 1440
WHEN TIMESTAMPDIFF(MINUTE,CONCAT('2020-02-16',' ',a.sign_time),MIN(b.sign_time))<=0 THEN 0
ELSE TIMESTAMPDIFF(MINUTE,CONCAT('2020-02-16',' ',a.sign_time),MIN(b.sign_time)) END late_minute
FROM work_plan a LEFT JOIN sign_log b ON a.worker_name=b.worker_name
WHERE DATE(b.sign_time)='2020-02-16' 
AND end_date IS NULL OR '2020-02-16' BETWEEN start_date AND end_date 
GROUP BY a.worker_name;
#################答案##################

Tema: 2. Además, simule el siguiente escenario para escribir la declaración SQL correspondiente:

1. Un día la máquina de registro es anormal, y la asistencia de todos los empleados de la empresa debe procesarse a las 7:00 de ese día (Nota: aquellos que hayan registrado ese día no necesitan ser procesados)
Respuesta :

SELECT w.worker_name, 
CASE WHEN s.sign_time IS NULL THEN '7:00:00' 
	ELSE MIN(s.sign_time) END 打卡时间
FROM work_plan w
LEFT JOIN sign_log s ON w.`worker_name`=s.`worker_name`
GROUP BY w.worker_name

Supongo que te gusta

Origin blog.csdn.net/qq_42005540/article/details/114325274
Recomendado
Clasificación