Ver Mensaje Individual
  #4  
Antiguo 26-12-2023
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Reputación: 27
delphi.com.ar Va por buen camino
Siempre primero pensar en crear el modelo de datos normalizando la información. En este caso crear la tabla de turnos, luego en armar la consulta:

Código SQL [-]
DROP TABLE IF EXISTS TURNO;

CREATE TABLE TURNO
(
  ID_TURNO INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT "Identificador único de registro",
  DESCRIPCION VARCHAR(100) NOT NULL COMMENT "Descripción del turno",
  DESDE TIME NOT NULL,
  HASTA TIME NOT NULL,
  PRIMARY KEY PK_TURNO (ID_TURNO)
);

INSERT INTO TURNO (DESCRIPCION, DESDE, HASTA) VALUES
('Amanecida', '00:01', '06:00'),
('Mañana',    '06:01', '12:00'),
('Tarde',     '12:01', '18:00'),
('Noche',     '18:01', '24:00');


SELECT DESCRIPCION, COUNT(*) 
FROM TURNO
JOIN VENTA ON TIME(FECHA) BETWEEN TURNO.DESDE AND TURNO.HASTA
GROUP BY TURNO.DESCRIPCION;

Ese ejemplo funciona en MySql.

PD: Le agregaría a la tabla TURNO un trigger de validación que no permita dos turnos en el mismo rango, y que el rango sea válido.

Saludos
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita