SQL Server - Consulta de varias tablas

 
Vista:
sin imagen de perfil
Val: 24
Ha aumentado 1 puesto en SQL Server (en relación al último mes)
Gráfica de SQL Server

Consulta de varias tablas

Publicado por Hu (13 intervenciones) el 17/09/2018 22:50:29
Saludos,

Importo información a varias tablas de SQL y necesito crear un select donde pueda ver agrupado la fecha de cada día que se a importado. Me explico:

Tengo 4 tablas que importan diario algunos 100 o mas filas. Todas las tablan tienen un columna que contiene la fecha de la transacción. Por x o y la importación falla en alguna de las tablas y quiero tener un select donde pueda ver que día falta en que tabla.

Trate de hacer un select, creo que está un poco cavernícola, pero algo así es que quiero. Algo malo tengo en el select porque cuando lo corro me dura hasta 15 minuto generando el query y no arroja nada.

select gd.dob as GNDSALE, gi.dob as GNDITEM, gt.[date] as GNDTNDR, h.dob as HINVOICE
from gndsale gd
full join GNDITEM gi on gd.dob = gi.dob
full join GNDTNDR gt on gd.dob = gt.date
full join HINVOICE h on gd.dob = h.dob
where gd.dob between '20180901' and '20180916'
group by gd.DOB, gi.dob, gt.[date], h.dob
order by gd.dob asc

Gracias.
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 Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Consulta de varias tablas

Publicado por Isaias (4558 intervenciones) el 18/09/2018 00:33:39
¿Tiene indices declarados?

Esta haciendo FULL JOIN, eso significa que aunque en el where decide "filtrar" su query, el FULL JOIN manda y lo hace de "todo de todo"

Cambie esta sentencia

where gd.dob >= '20180901' and gd.dob <= '20180916'
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
sin imagen de perfil
Val: 24
Ha aumentado 1 puesto en SQL Server (en relación al último mes)
Gráfica de SQL Server

Consulta de varias tablas

Publicado por Hu (13 intervenciones) el 18/09/2018 15:47:12
Saludos Isaisa,

No tengo indices.

Por cual filtro debo cambiar el where, porque necesito obtener una fecha en específico.

Gracias.
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 Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Consulta de varias tablas

Publicado por Isaias (4558 intervenciones) el 18/09/2018 18:37:49
Por este

where gd.dob >= '20180901' and gd.dob <= '20180916'

Y debes declarar indices sobre ese campo, ademas revisa tu FULL JOIN, ¿es correcto en este caso un FULL JOIN?
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
sin imagen de perfil
Val: 24
Ha aumentado 1 puesto en SQL Server (en relación al último mes)
Gráfica de SQL Server

Consulta de varias tablas

Publicado por Hu (13 intervenciones) el 18/09/2018 21:48:19
Saludos Isaias,

Le verdad que he intentado lo que me dices, pero literalmente lo que necesito son todos estos select en un solo select.

select dob from HINVOICE where dob between '20180901' and '20180917' and unit = '4' group by dob

select dob from gndsale where dob between '20180901' and '20180917' and unit = '4' group by dob

select dob from gnditem where dob between '20180901' and '20180917' and unit = '4' group by dob

select [date] from GNDTNDR where [date] between '20180901' and '20180917' and strunit = '4' group by [date]

select [date] from ADJTIME where [date] between '20180901' and '20180917' and unit = '4' group by [date]

Gracias.
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 Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Consulta de varias tablas

Publicado por Isaias (4558 intervenciones) el 19/09/2018 17:35:32
Al cliente lo que pida, siga utilizando BETWEEN para comparar sus fechas y seguirá teniendo problemas de lentitud
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
sin imagen de perfil
Val: 24
Ha aumentado 1 puesto en SQL Server (en relación al último mes)
Gráfica de SQL Server

Consulta de varias tablas

Publicado por Hu (13 intervenciones) el 19/09/2018 19:48:53
Perfecto, cambié el BETWEEN por la lógica que me enviaste.

Alguna ayuda con los distintos select en uno solo?

Gracias.
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 Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Consulta de varias tablas

Publicado por Isaias (4558 intervenciones) el 20/09/2018 18:12:24
¿Le creaste los indices?

Las tablas de tu consulta, ¿se unen por algún campo?, de ser así, entonces utiliza el JOIN para unir tus tablas en la consulta, si tu respuesta es NO, entonces no hay forma de hacer un SOLO select para sacar tu consulta
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 Plutarco
Val: 122
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Consulta de varias tablas

Publicado por Plutarco (46 intervenciones) el 10/10/2018 19:21:13
Hola buen día

Si lo que quieres es ver todos tus selects juntos porqué no los unes? por lo que veo lo único que quieres es en cada select es en una columna el conjunto de fechas que pertenecen a tu criterio, entonces haz lo siguiente:

1
2
3
4
5
6
7
8
9
select dob from HINVOICE where dob between '20180901' and '20180917' and unit = '4' group by dob
UNION ALL
select dob from gndsale where dob between '20180901' and '20180917' and unit = '4' group by dob
UNION ALL
select dob from gnditem where dob between '20180901' and '20180917' and unit = '4' group by dob
UNION ALL
select [date] 'dob' from GNDTNDR where [date] between '20180901' and '20180917' and strunit = '4' group by [date]
UNION ALL
select [date] dob' from ADJTIME where [date] between '20180901' and '20180917' and unit = '4' group by [date]

Cuando usas UNION ALL el número de columnas debe ser el miso así como el tipo y el nombre de cada una de ellas

Salud2
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