Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-12-2023
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 21
oscarac Va por buen camino
consulta por rango de fechas

buenas noches...
quiero ver si me pueden ayudar a optimizar este proceso

tengo turnos

01 00:01 06:00 Amanecida
02 06:01 12:00 Mañana
03 12:01 18:00 Tarde
04 18:01 24:00 Noche

y tengo ventas entre esas horas
lo que quiero es sacar el total de ventas en los turnos correspondientes, eso implica que si tengo una venta a las 07:00 am la venta corresponde al turno 02, venta a las 17:35, corresponde al turno 03... y asi sucesivamente

lo que hago es ... genero una consulta (group) por las horas de las ventas y lo recorro para buscar el rango en el que esta, pero no me parece optimo ese proceso, asi que recurro a uds. para ver si tienen alguna idea para optimizar la consulta o si se puede hacer via subconsultas o algo asi
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #2  
Antiguo 26-12-2023
chenech chenech is offline
Miembro
 
Registrado: dic 2013
Posts: 81
Poder: 11
chenech Va por buen camino
Hola, yo tengo algo parecido y lo que hago es que en el momento de generar la factura grabo el número correspondiente, luego las consultas vuelan por que es por el 1, 2, 3, etc.
Resumiendo, en el momento de generar la venta, busco el número de turno que le corresponde y aparte de grabar la hora en la factura, también grabo el turno.
Generas un campo nuevo en la base de datos para almacenar ese número y modificas el procedimiento de grabar para que busque al que corresponde y lo grabe, 1, 2, etc.
Un saludo.
Responder Con Cita
  #3  
Antiguo 26-12-2023
Avatar de pgranados
pgranados pgranados is offline
Miembro
 
Registrado: sep 2022
Ubicación: México
Posts: 297
Poder: 3
pgranados Va por buen camino
Puedes poner la sentencia SQL que usas?
Responder Con Cita
  #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.954
Poder: 27
delphi.com.ar Va camino a la fama
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
  #5  
Antiguo 29-12-2023
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 21
oscarac Va por buen camino
lo solucioné de esta manera

-- aqui tengo las ventas en rango de fecha o en el dia.. dependiendo del where
Código SQL [-]
SELECT Left(hora,2) as hora, a.IDEN, Sum (d.PT) as PT into #d
  FROM TBLCONSUMOC c
  left join tblconsumod d on c.tdc = d.tdc and c.doc = d.doc
  left join tblarticulo a on d.kod = a.kod
  where
 convert(varchar, c.f_doc, 112) = '20231225' and ISNULL(c.sts,'') = ''
  group by Left(hora,2), a.iden
  order by Left(hora,2), a.iden

Código SQL [-]
  select r1.kod, r1.descl, SUM(PT) from (Select * from tblturno) r1, #d 
  where hora between r1.hini and r1.nfin
  group by r1.kod, r1.descl

aqui obtengo lo que deseo


lo dejo por si le puede servir a alguien
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Consulta rango de fechas con ADO y Access lbidi Varios 6 15-02-2019 21:29:56
Consulta Mysql Suma entre rango de fechas kaeltas MySQL 4 22-06-2012 22:30:44
Consulta Rango de Fechas soloriv SQL 7 23-06-2006 04:02:03
Consulta de rango de fechas con sql Yanet SQL 2 12-02-2005 03:07:04
Consulta sql con rango de fechas jgutti SQL 5 26-02-2004 19:51:54


La franja horaria es GMT +2. Ahora son las 01:40:00.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi