SQL - Hacer consultas por turnos Horas de distinto dia

 
Vista:
Imágen de perfil de Cesar
Val: 35
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Hacer consultas por turnos Horas de distinto dia

Publicado por Cesar (14 intervenciones) el 17/03/2019 11:54:58
Buenas y gracias de antemano .

Mi consulta es referente a tres consultas que hago a una base de datos phaçp my admin desde una app web.

Estas consultas se hacen por turnos me explico:

la primera turno de mañana extrae todo desde las 06:00 am hasta las 14:00 pm
1
2
("SELECT DESTINO,COUNT(DESTINO) AS TOTAL FROM parte WHERE HOUR(FECHA) BETWEEN '06:00:00' AND '14:00:00'
        GROUP BY 1 HAVING COUNT(DESTINO) >=1");
esta la hace bien

la segunda turno de tarde extrae todo desde las 14:00 am hasta las 22:00 pm
1
2
("SELECT DESTINO,COUNT(DESTINO) AS TOTAL FROM parte WHERE HOUR(FECHA) BETWEEN '14:00:00' AND '21:00:00'
        GROUP BY 1 HAVING COUNT(DESTINO) >=1");

el problema me llega en esta tercera NOCHE de 22:00 a 06:00 no me la hace , si lo pongo hasta las 00:00 de la noche si lo hace pero en cuanto cambia de dia a las 0:00 no me lo hace
Como podria hacerlo Gracias

1
2
("SELECT DESTINO,COUNT(DESTINO) AS TOTAL FROM parte WHERE HOUR(FECHA) BETWEEN '22:00:00' AND '06:00:00'
        GROUP BY 1 HAVING COUNT(DESTINO) >=1");

Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Panchove
Val: 150
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Hacer consultas por turnos Horas de distinto dia

Publicado por Panchove (62 intervenciones) el 17/03/2019 23:40:13
Hola

Tienes que dividor el turno

1
2
3
4
5
6
7
("SELECT DESTINO,COUNT(DESTINO) AS TOTAL FROM parte WHERE HOUR(FECHA) BETWEEN '22:00:00' AND '23:59:59'

        GROUP BY 1 HAVING COUNT(DESTINO) >=1");
 
("SELECT DESTINO,COUNT(DESTINO) AS TOTAL FROM parte WHERE HOUR(FECHA) BETWEEN '00:00:00' AND '05:59:59'

        GROUP BY 1 HAVING COUNT(DESTINO) >=1");

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de César
Val: 35
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Hacer consultas por turnos Horas de distinto dia

Publicado por César (14 intervenciones) el 18/03/2019 09:36:53
Así es como lo tengo actualmente
Pero quería saber si hay algunas otra manera para que me lo extraiga como un solo turno.

Gracias de antemano
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Francisco
Val: 150
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Hacer consultas por turnos Horas de distinto dia

Publicado por Francisco (62 intervenciones) el 18/03/2019 20:23:32
Proablemente lo quieras asi

1
2
3
4
5
6
7
8
9
SELECT DESTINO, COUNT(*) FROM
(
SELECT DESTINO,COUNT(DESTINO) AS TOTAL FROM parte WHERE HOUR(FECHA) BETWEEN '22:00:00' AND '23:59:59'
        GROUP BY 1 HAVING COUNT(DESTINO) >=1"
UNION ALL 
SELECT DESTINO,COUNT(DESTINO) AS TOTAL FROM parte WHERE HOUR(FECHA) BETWEEN '00:00:00' AND '05:59:59'
        GROUP BY 1 HAVING COUNT(DESTINO) >=1
)  AS t
GROUP by t.DESTINO;

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Cesar
Val: 35
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Hacer consultas por turnos Horas de distinto dia

Publicado por Cesar (14 intervenciones) el 19/03/2019 11:16:58
Esa sentencia es ya de competición jejejejeje

Muchas gracias la he probado y va de lujo .

Perfecto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Cesar
Val: 35
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Hacer consultas por turnos Horas de distinto dia

Publicado por Cesar (14 intervenciones) el 20/03/2019 11:31:00
Ups pues lo probé breve mente e iva pero al ponerlo a funcionar me he dado cuenta que solo cuenta el primer

registro de antes de las doce y el primero después de las doce ,cuando se repiten ya no les cuenta .

ejemplo si tengo una (a) antes de las 00:00 y otra (a) después de las 00:00 me cuenta dos . bien pero

si tengo dos (a) antes de las 00:00 y tres (a) después de las 00:00 me sigue contando dos en vez 5 que seria el total


Gracias de antemano y un saludo .
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Vega
Val: 187
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Hacer consultas por turnos Horas de distinto dia

Publicado por Vega (73 intervenciones) el 21/03/2019 22:11:11
Hola Cesar,

El problema lo tienes porque estás evaluando la fecha sólo en relación a la hora. Creo que necesitas evaluar la fecha entera para conseguir lo que buscas.

Creo que la siguiente consulta te puede valer para cualquiera de las dos circumstancias en la que estés ejecutando la sentencia (antes or después de media noche).

1
2
3
4
5
6
7
8
9
SELECT 	Destino
,		COUNT(distinct FECHA) AS TOTAL
FROM 	parte
WHERE
		/* si se ejecuta antes de media noche */
		FECHA BETWEEN concat(DATE(NOW()), ' 22:00:00') AND concat(DATE(NOW()), ' 23:59:59')
		/* si se ejecuta despues de media noche */
	OR 	(FECHA BETWEEN date_add(concat(DATE(NOW()), ' 22:00:00'), interval -1 day) AND concat(DATE(NOW()), ' 06:00:00'))
group by destino;

Te explico, evalúo el valor de la función now() y la comparo con las fechas de tu tabla Parte.
El count(distinct Fecha) procura que no se duplique la cuenta de fechas.

espero que te ayude!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Cesar
Val: 35
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Hacer consultas por turnos Horas de distinto dia

Publicado por Cesar (14 intervenciones) el 21/03/2019 22:26:23
Lo he probado y no me arroja ningún error , pero me sale la tabla vacía no me saca ningún dato
cambie el campo destino a mayúsculas que es como lo tengo en tabla y nada .

llevo probando ya unos cuantos días y nada de nada

Gracias de antemano
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Vega
Val: 187
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Hacer consultas por turnos Horas de distinto dia

Publicado por Vega (73 intervenciones) el 21/03/2019 22:44:02
quita la sententia en la línea 8 a ver si te devuelve algo y ya que estamos, que the devuelve esto:

select concat(DATE(NOW()), ' 22:00:00');
union
select date_add(concat(DATE(NOW()), ' 22:00:00'), interval -1 day)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Cesar
Val: 35
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Hacer consultas por turnos Horas de distinto dia

Publicado por Cesar (14 intervenciones) el 21/03/2019 22:55:22
Muchas gracias lo primero

Esto me devuelve con la ultima sentencia que has escrito :
quitando el primer ;
me devuelve esto : concat(DATE(NOW()), ' 22:00:00')
2019-03-21 22:00:00
2019-03-20 22:00:00
sin el ; nada

y quitando la linea 8 me sigue sin dar fallo y no me da ningún resultado .
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Vega
Val: 187
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Hacer consultas por turnos Horas de distinto dia

Publicado por Vega (73 intervenciones) el 21/03/2019 23:11:32
¿es posible ver la definicion de la tabla?
debe tener algo que ver con el fomato de las fechas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Cesar
Val: 35
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Hacer consultas por turnos Horas de distinto dia

Publicado por Cesar (14 intervenciones) el 21/03/2019 23:23:18
Por supuesto faltaría mas


PJI varchar(20) prymary 012345
NOMBRE varchar(20) ces
RETOQUE varchar(20) PAR
DEFECTO varchar(20) GRA
ZONA varchar(20) PUERT
NUM varchar(20) KNG
DESTINO varchar(20) RBIT
FECHA timestamp 2019-03-03 14:36:10
...
TEXTO varchar(300) HOLA QUE TAL
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Vega
Val: 187
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Hacer consultas por turnos Horas de distinto dia

Publicado por Vega (73 intervenciones) el 22/03/2019 00:08:15
es que timestamp no es lo mismo que datetime.
vamos a probar con from_unixtime()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SELECT 	Destino
 
,		COUNT(distinct FECHA) AS TOTAL
 
FROM 	parte
 
WHERE
 
		/* si se ejecuta antes de media noche */
 
		from_unixtime(FECHA, '%Y-M%-D% %h:%i:%s') BETWEEN concat(DATE(NOW()), ' 22:00:00') AND concat(DATE(NOW()), ' 23:59:59')
 
		/* si se ejecuta despues de media noche */
 
	OR 	from_unixtime(FECHA, '%Y-M%-D% %h:%i:%s') BETWEEN date_add(concat(DATE(NOW()), ' 22:00:00'), interval -1 day) AND concat(DATE(NOW()), ' 06:00:00')
 
group by destino;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Cesar
Val: 35
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Hacer consultas por turnos Horas de distinto dia

Publicado por Cesar (14 intervenciones) el 22/03/2019 00:15:12
Nada

MySQL ha devuelto un conjunto de valores vacío (es decir: cero columnas). (La consulta tardó 0,0000 segundos.)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Vega
Val: 187
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Hacer consultas por turnos Horas de distinto dia

Publicado por Vega (73 intervenciones) el 22/03/2019 00:25:22
caramba!!!
Tendrás que crear un simulacro de los datos para que lo posamos ver mejor entonces.

Crea una sentencia CREATE TABLE identica a tu tabla y un INSERT que represente los registros y a lo mejor lo podemos ver mejor.
¿Que versión tienes?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Vega
Val: 187
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Hacer consultas por turnos Horas de distinto dia

Publicado por Vega (73 intervenciones) el 22/03/2019 00:45:10
Ultima vez

1
2
3
4
5
6
7
8
9
SELECT 	Destino
,		COUNT(distinct FECHA) AS TOTAL
FROM 	parte
WHERE
/* si se ejecuta antes de media noche */
FECHA BETWEEN UNIX_TIMESTAMP(concat(DATE(NOW()), ' 22:00:00')) AND UNIX_TIMESTAMP(concat(DATE(NOW()), ' 23:59:59'))
/* si se ejecuta despues de media noche */
OR 	FECHA BETWEEN unix_TIMESTAMP(date_add(concat(DATE(NOW()), ' 22:00:00'), interval -1 day)) AND UNIX_TIMESTAMP(concat(DATE(NOW()), ' 06:00:00'))
group by destino;

Definitivamente el tipo en la fecha, al cambiar las fechas a timestamp me sale ago
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Cesar
Val: 35
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Hacer consultas por turnos Horas de distinto dia

Publicado por Cesar (14 intervenciones) el 22/03/2019 00:52:26
No se si te valdrá con esto

CREATE TABLE `parte1` (
`PJI` varchar (20) ,
`NOMBRE` varchar(20) ,
`RETOQUE` varchar(20),
`DEFECTO` varchar (20),
`ZONA`varchar(20) ,
`NUM` varchar(20) ,
`DESTINO` varchar(20) ,
`FECHA`timestamp,
`TEXTO` varchar(20) ,
PRIMARY KEY (`PJI`),


INSERT INTO `parte1` (`PJI`, `NOMBRE`, `RETOQUE`, `DEFECTO`, `ZONA`, `NUM`, `DESTINO`, `FECHA`, `TEXTO` ) VALUES
(1, '1234', 'CES', 'GRS', 'GRA', 'PUER', 'RBI', '2019-03-03 04:36:10'),
(2, '1234', 'CES', 'GRS', 'GRA', 'PUER', 'RBI', '2019-03-03 22:36:10'),

la versión es la 7.2.10
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Vega
Val: 187
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Hacer consultas por turnos Horas de distinto dia

Publicado por Vega (73 intervenciones) el 22/03/2019 14:11:38
No sé si viste ésto:

1
2
3
4
5
6
7
8
9
SELECT 	Destino
,		COUNT(distinct FECHA) AS TOTAL
FROM 	parte
WHERE
/* si se ejecuta antes de media noche */
FECHA BETWEEN UNIX_TIMESTAMP(concat(DATE(NOW()), ' 22:00:00')) AND UNIX_TIMESTAMP(concat(DATE(NOW()), ' 23:59:59'))
/* si se ejecuta despues de media noche */
OR 	FECHA BETWEEN unix_TIMESTAMP(date_add(concat(DATE(NOW()), ' 22:00:00'), interval -1 day)) AND UNIX_TIMESTAMP(concat(DATE(NOW()), ' 06:00:00'))
group by destino;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Cesar
Val: 35
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Hacer consultas por turnos Horas de distinto dia

Publicado por Cesar (14 intervenciones) el 22/03/2019 23:46:16
Disculpa por contestar tarde pero estaba trabajando

nada me arroja lo mismo que la anterior :

MySQL ha devuelto un conjunto de valores vacío (es decir: cero columnas). (La consulta tardó 0,0000 segundos.)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar