Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[SOLUCIONADO] Consultar datos por fecha

Estas en el tema de Consultar datos por fecha en el foro de Mysql en Foros del Web. Hola soy nuevo en eso de los foros pero necesito su ayuda estoy utilizando mysql como gestor de base de datos y tengo esta consulta ...
  #1 (permalink)  
Antiguo 11/11/2015, 11:33
 
Fecha de Ingreso: noviembre-2015
Mensajes: 18
Antigüedad: 8 años, 5 meses
Puntos: 0
Consultar datos por fecha

Hola soy nuevo en eso de los foros pero necesito su ayuda

estoy utilizando mysql como gestor de base de datos y tengo esta consulta

Código SQL:
Ver original
  1. SELECT e.NombreEmpleado,s.salarioEmple,COUNT(descuento) FROM empleado e
  2.  INNER JOIN salario s ON e.idempleado=s.idempleado
  3.  LEFT JOIN descuento d ON e.idempleado=d.idempleado
  4.  INNER JOIN sucursal su ON e.idsucursal=su.idsucursal
  5.  WHERE  su.idsucursal=1
  6.  GROUP BY e.nombreEmpleado,s.salarioEmple

done muestro todos los empleados con su respectivo salario y el numero de descuento que tienen en este caso me muestra 3 empleados el cual solo uno no tiene descuento es decir su conteo esta a 0 perfecto ahi esta funcionando bien

Código SQL:
Ver original
  1. SELECT e.NombreEmpleado,s.salarioEmple,COUNT(descuento) FROM empleado e
  2.  INNER JOIN salario s ON e.idempleado=s.idempleado
  3.  LEFT JOIN descuento d ON e.idempleado=d.idempleado
  4.  INNER JOIN sucursal su ON e.idsucursal=su.idsucursal
  5.  WHERE  su.idsucursal=1 AND d.fecha  BETWEEN '2015-11-06' AND '2015-11-07'
  6.  GROUP BY e.nombreEmpleado,s.salarioEmple

ahora que quiero que me muestre en un rango de fecha el conteo de descuento de los empleados solo me muestra el de uno a lo que voy es que los otros dos empleados quisiera que igual aparezcan porque ellos no tienen la culpa de no tener descuento entre ese rango de fechas no se si algo estoy haciendo mal o que
enserio necesito su ayuda

Última edición por gnzsoloyo; 11/11/2015 a las 11:54
  #2 (permalink)  
Antiguo 11/11/2015, 11:39
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Consultar datos por fecha

Con ese query no vas a obtener lo q necesitas, porq pues porq el filtro de fecha va sobre la tabla de descuentos, podrias agregar esto despues del between

Código MySQL:
Ver original
  1. And ((d.fecha between fecha 1 and fecha 2) or d.fecha is null))
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 11/11/2015, 11:43
 
Fecha de Ingreso: noviembre-2015
Mensajes: 18
Antigüedad: 8 años, 5 meses
Puntos: 0
Respuesta: Consultar datos por fecha

tu dices asi

Código SQL:
Ver original
  1. SELECT e.NombreEmpleado,s.salarioEmple,COUNT(descuento) FROM empleado e
  2.  INNER JOIN salario s ON e.idempleado=s.idempleado
  3.  LEFT JOIN descuento d ON e.idempleado=d.idempleado
  4.  INNER JOIN sucursal su ON e.idsucursal=su.idsucursal
  5.  WHERE  su.idsucursal=1 AND d.fecha BETWEEN AND ((d.fecha BETWEEN '2015-11-06' AND fecha '2015-11-07') OR d.fecha IS NULL))
  6.  GROUP BY e.nombreEmpleado,s.salarioEmple

porque lo puse asi y me dio error no se si no era asi

Última edición por gnzsoloyo; 11/11/2015 a las 11:54
  #4 (permalink)  
Antiguo 11/11/2015, 11:46
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Consultar datos por fecha

No asi no, lo que te sugeria era lo siguiente:

Código MySQL:
Ver original
  1. select e.NombreEmpleado,s.salarioEmple,count(descuento) from empleado e
  2. inner join salario s on e.idempleado=s.idempleado
  3. left join descuento d on e.idempleado=d.idempleado
  4. inner join sucursal su on e.idsucursal=su.idsucursal
  5. where su.idsucursal=1 And ((d.fecha between fecha 1 and fecha 2) or d.fecha is null))
  6. group by e.nombreEmpleado,s.salarioEmple
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 11/11/2015, 11:50
 
Fecha de Ingreso: noviembre-2015
Mensajes: 18
Antigüedad: 8 años, 5 meses
Puntos: 0
Respuesta: Consultar datos por fecha

Si lo arregle y fijate que me muestra ahora solo dos empleados uno que es el el que tiene descuento entre esas fechas y el otro aparece que no tiene descuento pero aun me falta uno ya que en el su.idsucursal=1 se encuentran 3 empleados dentro de ella
  #6 (permalink)  
Antiguo 11/11/2015, 12:01
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Consultar datos por fecha

Cambia el orden de las tablas algo asi:

Código MySQL:
Ver original
  1. Select * from empleados
  2. Inner join salarios
  3. Inner join sucursal
  4. Left join descuentos

Y deja los mismos parametros en el where
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 11/11/2015, 12:06
 
Fecha de Ingreso: noviembre-2015
Mensajes: 18
Antigüedad: 8 años, 5 meses
Puntos: 0
Respuesta: Consultar datos por fecha

Ya cambie el orden de las tablas y aun asi me muestra solo dos datos no se si debo usar una subconsulta o que aunque con lo que tu me diste ya logre sacar el empleado que queria pero se me borro otro empleado en la consulta
  #8 (permalink)  
Antiguo 11/11/2015, 12:11
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Consultar datos por fecha

Un pequeño ejemplo de tus datos ayudaria mas, para no estar adivinando
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #9 (permalink)  
Antiguo 11/11/2015, 13:37
 
Fecha de Ingreso: noviembre-2015
Mensajes: 18
Antigüedad: 8 años, 5 meses
Puntos: 0
Respuesta: Consultar datos por fecha

VAYA en los datos que me deberia de dar entre la fecha 2015-11-06 y 2015-11-07 serian

irvin sanchez count(descuento)= 4
juan ernesto count(descuento)= 0
adrian rivera count(descuento)= 0 esos tres quiero que me muestre pero en la consulta que hice con tu ayuda solo me muestra a irvin y adrian no se si porque juan si esta en la tabla descuentos aunque el decuento que el tiene pertenece a otra fecha que no esta en el rango que e colocado
  #10 (permalink)  
Antiguo 11/11/2015, 14:05
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Consultar datos por fecha

Me referia al contenido de tus tablas no al resultado q esperas
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #11 (permalink)  
Antiguo 11/11/2015, 14:25
 
Fecha de Ingreso: noviembre-2015
Mensajes: 18
Antigüedad: 8 años, 5 meses
Puntos: 0
Respuesta: Consultar datos por fecha

en la tabla empleado estan
-idempleado int
-nombreempleado varchar(40)
-apellidoempleado varchar(40)
-edad int
id sucursal int

en sucursal esta
idsucursal int
nombresucursal varchar(40)

en salario esta
idsalario int
salarioemple double(6,2)
idempleado int

y en descuento esta
iddescuento int
descuento double(6,2)
fecha date
idempleado int

esas son las 4 tablas
  #12 (permalink)  
Antiguo 11/11/2015, 14:35
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Consultar datos por fecha

Contenido, datos, los nomberes de los usuarios, lis dueldos, las empresas y los descuentos, es lo q necesiti para saber porq no te salen los 3 o 4 usuarios q esperas, la estructura no me sirve en este momento
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #13 (permalink)  
Antiguo 11/11/2015, 14:42
 
Fecha de Ingreso: noviembre-2015
Mensajes: 18
Antigüedad: 8 años, 5 meses
Puntos: 0
Respuesta: Consultar datos por fecha

en empleado estan
idempleado=1, Irvin Sanchez 21 años y en id sucursal=1
idempleado=2, juan ernesto 23 años y en id sucursal=1
idempleado=3, adrian rivera 27 años y en id sucursal=1

en sucursal esta
idsucursal = 1, nombresucursal=Multiplaza

en salario estan
idempleado=1, salarioemple=251.70
idempleado=2, salarioemple=251.70
idempleado=3, salarioemple=265.00

y en descuento esta
idempleado=1 fecha=2015-11-06
idempleado=1 fecha=2015-11-06
idempleado=2 fecha=2015-11-08

vaya como se ve cuando yo mando los dos tipos de fecha solo aparece el idempleado1 osea IRVIN pero no me muestra los otros 2 y en el codigo que tu me diste me muesta idempleado1 y idempleado3 pero no el idempleado2 no se si necesitas algo mas que pueda ayudarte a ayudarme jaja
  #14 (permalink)  
Antiguo 11/11/2015, 14:58
Avatar de sergio_ronaldidho  
Fecha de Ingreso: noviembre-2015
Mensajes: 5
Antigüedad: 8 años, 5 meses
Puntos: 0
Respuesta: Consultar datos por fecha

Hola amigos, soy nuevo en el foro, alguien que pudiera explicarme como postear un tema, postear una pregunta, se los agradecería mucho
  #15 (permalink)  
Antiguo 11/11/2015, 15:04
 
Fecha de Ingreso: noviembre-2015
Mensajes: 18
Antigüedad: 8 años, 5 meses
Puntos: 0
Respuesta: Consultar datos por fecha

Sergio solo debes buscar la seccion donde deseas agregar el nuevo tema y arriba te saldra la opcion de agregar tema y ya saludos
  #16 (permalink)  
Antiguo 11/11/2015, 15:08
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Consultar datos por fecha

Como te explico....con esos datos que tienes y esos filtros no vas a poder obtener a los 3 usuarios...porque el usuario 2 tiene una fecha de 8 de noviembre, en el filtro del where le estamos diciendo que nos regrese los usuarios que su fecha sea entre el 6 y el 7 o los que no tienen registro, el usuario 2 tiene un registro pero la fecha esta fuera del rango del between, para regresar todos los usuarios tendrias que eliminar ese filtro de tu where(porque no tiene caso que pongas el filtro si al final vas a regresar toda la informacion este o no dentro del rango)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #17 (permalink)  
Antiguo 11/11/2015, 15:11
 
Fecha de Ingreso: noviembre-2015
Mensajes: 18
Antigüedad: 8 años, 5 meses
Puntos: 0
Respuesta: Consultar datos por fecha

Si te entiendo lo que pasa es que necesito de ese between porque en el pgrograma que estoy haciendo en php que es una planilla paso los datos entre dos fechas y listo todos los empleados de esa sucursal ya sea tengan o no tengan descuento pues al final a todos se les debe pagar
  #18 (permalink)  
Antiguo 11/11/2015, 15:15
 
Fecha de Ingreso: noviembre-2015
Mensajes: 18
Antigüedad: 8 años, 5 meses
Puntos: 0
Respuesta: Consultar datos por fecha

LOGRE MI COMETIDO CON LOS UNION PERO SE QUE NO ES ADECUADO USARLOS DE ESA MANERA O NO SE DIME TU SI ESTA BIEN

SELECT A.IDEMPLEADO,CONCAT(NOMBREEMPLEADO,' ',APELLIDOEMPLEADO) AS NOMBRE,C.SALARIOEMPLE,B.NOMBRESUCURSAL,COUNT(DESCU ENTO) AS NDESCUENTO, SUM(DESCUENTO) AS DESCUENTO
FROM EMPLEADO A
INNER JOIN SUCURSAL B ON A.IDSUCURSAL = B.IDSUCURSAL
INNER JOIN SALARIO C ON A.IDEMPLEADO = C.IDEMPLEADO
LEFT JOIN DESCUENTO D ON A.IDEMPLEADO = D.IDEMPLEADO
WHERE A.IDSUCURSAL = 1 AND (D.fecha between '2015-11-06' and '2015-11-07')
GROUP BY A.IDEMPLEADO
UNION
SELECT A.IDEMPLEADO,CONCAT(NOMBREEMPLEADO,' ',APELLIDOEMPLEADO) AS NOMBRE,C.SALARIOEMPLE,B.NOMBRESUCURSAL,0 AS NDESCUENTO, 0 AS DESCUENTO
FROM EMPLEADO A
INNER JOIN SALARIO C ON A.IDEMPLEADO = C.IDEMPLEADO
INNER JOIN SUCURSAL B ON A.IDSUCURSAL = B.IDSUCURSAL
WHERE A.IDSUCURSAL = 1
AND A.IDEMPLEADO NOT IN (
SELECT DISTINCT A.IDEMPLEADO
FROM EMPLEADO A
LEFT JOIN DESCUENTO D ON A.IDEMPLEADO = D.IDEMPLEADO
WHERE A.IDSUCURSAL = 1 AND (D.fecha between '2015-11-06' and '2015-11-07')
)
  #19 (permalink)  
Antiguo 11/11/2015, 15:20
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Consultar datos por fecha

Entonces no entiendo para que las fechas, pero bueno lo que ocupas es algo como esto:

Código SQL:
Ver original
  1. CREATE TABLE #empleados(
  2. id_empleado INT,
  3. nombre VARCHAR(20),
  4. id_sucursal INT
  5. )
  6.  
  7. CREATE TABLE #sucursal(
  8. id INT,
  9. nombre VARCHAR(20)
  10. )
  11.  
  12. CREATE TABLE #salario(
  13. id_empleado INT,
  14. salario INT
  15. )
  16.  
  17. CREATE TABLE #descuento(
  18. id_empleado INT,
  19. fecha datetime
  20. )
  21.  
  22.  
  23. INSERT INTO #empleados VALUES (1,'Irvin', 1)
  24. INSERT INTO #empleados VALUES (2,'juan',1)
  25. INSERT INTO #empleados VALUES (3,'Adrian',1)
  26.  
  27. INSERT INTO #sucursal VALUES (1,'Multiplaza')
  28.  
  29. INSERT INTO #salario VALUES (1,251)
  30. INSERT INTO #salario VALUES (2,251)
  31. INSERT INTO #salario VALUES (3,265)
  32.  
  33. INSERT INTO #descuento VALUES (1,'06-11-2015')
  34. INSERT INTO #descuento VALUES (1,'06-11-2015')
  35. INSERT INTO #descuento VALUES (2,'08-11-2015')
  36.  
  37.  
  38.  
  39.  
  40.  
  41. SELECT * FROM(
  42. SELECT t1.nombre,t3.salario,0 descuento, t1.id_empleado FROM #empleados AS t1
  43. INNER JOIN #salario AS t3 ON (t1.id_empleado=t3.id_empleado)
  44. INNER JOIN #sucursal AS t2 ON (t1.id_sucursal=t2.id)
  45. WHERE t2.id=1 AND t1.id_empleado NOT IN(
  46. SELECT descuentos.id_empleado FROM(
  47. SELECT t1.nombre,t3.salario,COUNT(t4.id_empleado) descuentos, t1.id_empleado FROM #empleados AS t1
  48. INNER JOIN #salario AS t3 ON (t1.id_empleado=t3.id_empleado)
  49. INNER JOIN #sucursal AS t2 ON (t1.id_sucursal=t2.id)
  50. LEFT JOIN #descuento AS t4 ON (t4.id_empleado=t1.id_empleado)
  51. WHERE t2.id=1 AND t4.fecha BETWEEN '06-11-2015' AND '07-11-2015'
  52. GROUP BY t1.nombre,t3.salario,t1.id_empleado
  53. ) AS descuentos
  54. )
  55. ) AS no_descuento
  56. UNION
  57. SELECT * FROM(
  58. SELECT t1.nombre,t3.salario,COUNT(t4.id_empleado) descuentos, t1.id_empleado FROM #empleados AS t1
  59. INNER JOIN #salario AS t3 ON (t1.id_empleado=t3.id_empleado)
  60. INNER JOIN #sucursal AS t2 ON (t1.id_sucursal=t2.id)
  61. LEFT JOIN #descuento AS t4 ON (t4.id_empleado=t1.id_empleado)
  62. WHERE t2.id=1 AND t4.fecha BETWEEN '06-11-2015' AND '07-11-2015'
  63. GROUP BY t1.nombre,t3.salario,t1.id_empleado
  64. ) AS descuentos

Ojo la sentencia para las tablas temporales esta en Sql server, pero el query te puede servir para lo que necesitas, este es el resultado:

nombre salario descuento id_empleado
Adrian 265 0 3
Irvin 251 2 1
juan 251 0 2


saludos!

P.D: Para sacar lo que necesitas no queda de otra mas que usar union, no esta bien el query porque queda demasiado rebuscado, pero si es lo que ocupas.......otra cosa tus tablas estan mal normalizadas.....
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #20 (permalink)  
Antiguo 11/11/2015, 15:25
 
Fecha de Ingreso: noviembre-2015
Mensajes: 18
Antigüedad: 8 años, 5 meses
Puntos: 0
Respuesta: Consultar datos por fecha

Gracias por la ayuda y si ahorita arreglo ese problemas de las tablas porque igual no estan ni relacionadas no se si eso afecte o que aunque e estado haciendo otras consultas y si me funcionan

Etiquetas: mysql+consulta
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:17.