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

Problema con Consulta en SQL

Estas en el tema de Problema con Consulta en SQL en el foro de Bases de Datos General en Foros del Web. Estimados, Tengo tres tablas mas bien son vistas con los nombres de las columnas iguales y necesito tener el resultado de una operación de los ...
  #1 (permalink)  
Antiguo 13/07/2015, 11:31
 
Fecha de Ingreso: julio-2015
Ubicación: Santiago
Mensajes: 4
Antigüedad: 8 años, 9 meses
Puntos: 0
Pregunta Problema con Consulta en SQL

Estimados,

Tengo tres tablas mas bien son vistas con los nombres de las columnas iguales y necesito tener el resultado de una operación de los datos dentro de un rango de fecha de las Tres tablas, es algo así.

R_GA_UNIM_DAY
t_hold:
t_talk:
n_inb:
time_key: esta es la fecha

R_MASISA_DAY
t_hold:
t_talk:
n_inb:
time_key: esta es la fecha

R_BANCO_DAY
t_hold:
t_talk:
n_inb:
time_key: esta es la fecha

Código SQL:
Ver original
  1. SELECT SUM(U.t_hold + U.t_talk)/ SUM(U.n_inb) , SUM(M.t_hold + M.t_talk)/ SUM(M.n_inb)
  2. FROM R_GA_UNIM_DAY U INNER JOIN R_MASISA_DAY M ON U.TIME_KEY= M.TIME_KEY
  3. WHERE M.time_key BETWEEN ('20150510') AND ('20150605')



Aqui me muestra los datos dentro de esas fechas, pero solo de dos tablas lo que me gustaría hacer es que en una sola consulta me muestre los datos entre esas fechas, pero de las tres tablas o inclusive si fueran mas, en consecuencia para posteriores consultas yo solo modificando la fecha podría obtener los datos de las tablas mientras se vayan actualizando.



where time_key between ('20150522') and ('20150605') // Que solo tenga que modificar este rango para que me traiga los resultados de los datos de las tablas

Última edición por gnzsoloyo; 13/07/2015 a las 11:43
  #2 (permalink)  
Antiguo 13/07/2015, 15:58
 
Fecha de Ingreso: junio-2008
Mensajes: 51
Antigüedad: 15 años, 10 meses
Puntos: 0
De acuerdo Respuesta: Problema con Consulta en SQL

Que tal,

Según entiendo para lograr lo que deseas debes de hacer un Join más, te comparto un query, además modifique tu consulta en la división porque en algún momento si ese valor es Cero te dará un error.

Código SQL:
Ver original
  1. SELECT
  2.     SUM(U.t_hold + U.t_talk)/ NULLIF(isnull(U.n_inb,0),0),
  3.     SUM(M.t_hold + M.t_talk)/ NULLIF(isnull(M.n_inb,0),0),
  4.     SUM(N.t_hold + N.t_talk)/ NULLIF(isnull(N.n_inb,0),0)
  5. FROM
  6.     R_GA_UNIM_DAY U
  7. INNER JOIN
  8.     R_MASISA_DAY M ON
  9.     U.TIME_KEY= M.TIME_KEY
  10. INNER JOIN
  11.     R_BANCO_DAY N ON
  12.     M.TIME_KEY= N.TIME_KEY
  13. WHERE M.time_key BETWEEN ('20150510') AND ('20150605')



Saludos!
Cita:
Editado: Autopromo

Última edición por gnzsoloyo; 14/07/2015 a las 06:35 Razón: Mal etiquetado
  #3 (permalink)  
Antiguo 14/07/2015, 05:52
 
Fecha de Ingreso: julio-2015
Ubicación: Santiago
Mensajes: 4
Antigüedad: 8 años, 9 meses
Puntos: 0
Respuesta: Problema con Consulta en SQL

Muchas gracias SteveMorrison,

Hice la modificación que me indicaste, esta si realiza la consulta, pero esta toma demasiado tiempo, mas de 4 minutos, esto quiere decir que si agrego mas tablas aumentaría el tiempo :/ . Esto quizás podría deberse a que efectúa el producto cartesiano?
  #4 (permalink)  
Antiguo 14/07/2015, 06:35
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Problema con Consulta en SQL

No veo que hayas dicho con qué DBMS estás trabajando, y no se infiere claramente de la query.
¿Me lo puedes aclarar?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 14/07/2015, 08:40
 
Fecha de Ingreso: julio-2015
Ubicación: Santiago
Mensajes: 4
Antigüedad: 8 años, 9 meses
Puntos: 0
Respuesta: Problema con Consulta en SQL

gnzsoloyo,

Por supuesto te lo aclaro estoy utilizando Microsoft SQL Server Management Studio.
  #6 (permalink)  
Antiguo 14/07/2015, 08:45
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Problema con Consulta en SQL

Es posible que esté generando algún tipo de conversión implícita al usar datos de fecha como cadenas de texto. Sería conveniente que uses conversiones explicitas por función, y te asegures de tener correctamente indexado el campo R_MASISA_DAY.time_key, con el mismo formato de los parámetros.
Usualmente, cuando un campo se indexa, y el parámetro con el que se compara en el WHERE no es exactamente el mimo tipo de la clave de indexación, los índices pueden terminar descartados, lo que obviamente impacta en la performance.

Siempre tienes herramietnas de SQL Server para analizar el plan de consulta. Úsalas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 14/07/2015, 12:09
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: Problema con Consulta en SQL

Aqui lo que veo seria un problema de indices, ademas no indicas que tipo de dato son tus campos
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #8 (permalink)  
Antiguo 15/07/2015, 06:42
 
Fecha de Ingreso: julio-2015
Ubicación: Santiago
Mensajes: 4
Antigüedad: 8 años, 9 meses
Puntos: 0
Respuesta: Problema con Consulta en SQL

Estimados,

El tipo de datos utilizados en t_tolh, t_talk, n_inb son decimal y en time_ket es varchar para todas las tablas. Pero logre efectuar una consulta que no demorara tanto tiempo y arrojara el resultado de la operación dentro de un rango de fecha, a continuación les muestro el código que realice en el cual inclusive agregue mas tablas:

Código SQL:
Ver original
  1. SELECT alias.SKILL,
  2. SUM(alias.t_hold+alias.t_talk)/ SUM(alias.n_inb) AS TMO
  3. FROM
  4. (
  5. SELECT 'UNIMARC' AS SKILL,
  6. t_hold,
  7. t_talk,
  8. n_inb,
  9. time_key
  10. FROM R_GA_UNIM_DAY
  11. UNION
  12. SELECT 'MASISA' AS SKILL,
  13. t_hold,
  14. t_talk,
  15. n_inb,
  16. time_key
  17. FROM R_MASISA_DAY
  18. UNION
  19. SELECT 'BANCO' AS SKILL,
  20. t_hold,
  21. t_talk,
  22. n_inb,
  23. time_key
  24. FROM R_GA_BFA_DAY BF
  25. UNION
  26. SELECT 'SECURITY VALPARAISO' AS SKILL,
  27. t_hold,
  28. t_talk,
  29. n_inb,
  30. time_key
  31. FROM R_SECUCO_DAY
  32. UNION
  33. SELECT 'SECURITY SANTIAGO' AS SKILL,
  34. t_hold,
  35. t_talk,
  36. n_inb,
  37. time_key
  38. FROM R_SECUPC_DAY
  39. ) AS alias
  40. WHERE alias.time_key BETWEEN ('20150629') AND ('20150705')
  41. GROUP BY alias.SKILL

Y me arroja este resultado:
SKILL TMO
BANCO 355.018844
MASISA 195.004629
SECURITY SANTIAGO 389.491051
SECURITY VALPARAISO 358.238532
UNIMARC 215.084354

Pero necesito agrupar los datos de SECURITY como uno solo, como verán están separados en dos tablas y necesito realizar esta operación sum(thold+t_talk)/n_inb, osea sumar los t_hold de Security Santiago con los t hold de Security Valparaiso y así con los demás datos para poder después efectuarles la operación sum(thold+t_talk)/n_inb y así me arroje un resultado concreto. Ya que si saco el promedio de los datos entregados actualmente por separado de ambas tablas me da un resultado matemático incorrecto. Lo ideal es que sea dentro de esta misma consulta.

Asi es como me gustaria que quedara:
SKILL TMO
BANCO 355.018844
MASISA 195.004629
SECURITY 624.705235
UNIMARC 215.084354

De todas maneras agradecer sus respuestas :D

Última edición por gnzsoloyo; 15/07/2015 a las 06:49
  #9 (permalink)  
Antiguo 15/07/2015, 07:28
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: Problema con Consulta en SQL

Código SQL:
Ver original
  1. SELECT alias.SKILL,
  2. SUM(alias.t_hold+alias.t_talk)/ SUM(alias.n_inb) AS TMO
  3. FROM
  4. (
  5. SELECT 'UNIMARC' AS SKILL,
  6. t_hold,
  7. t_talk,
  8. n_inb,
  9. time_key
  10. FROM R_GA_UNIM_DAY
  11. UNION
  12. SELECT 'MASISA' AS SKILL,
  13. t_hold,
  14. t_talk,
  15. n_inb,
  16. time_key
  17. FROM R_MASISA_DAY
  18. UNION
  19. SELECT 'BANCO' AS SKILL,
  20. t_hold,
  21. t_talk,
  22. n_inb,
  23. time_key
  24. FROM R_GA_BFA_DAY BF
  25. UNION
  26. SELECT 'SECURITY' AS SKILL,
  27. t_hold,
  28. t_talk,
  29. n_inb,
  30. time_key
  31. FROM R_SECUCO_DAY
  32. UNION
  33. SELECT 'SECURITY' AS SKILL,
  34. t_hold,
  35. t_talk,
  36. n_inb,
  37. time_key
  38. FROM R_SECUPC_DAY
  39. ) AS alias
  40. WHERE alias.time_key BETWEEN ('20150629') AND ('20150705')
  41. GROUP BY alias.SKILL
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: select, sql, tabla
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 06:12.