SQL - MUY URGENTE: consulta SQL (valida)

 
Vista:

MUY URGENTE: consulta SQL (valida)

Publicado por montse (8 intervenciones) el 20/05/2003 16:44:03
Hola a todos,

necesito hacer una consulta de lo siguiente.

Tengo las siguientes tablas

Obras
con el campo idobra,nombreobra

Maquinaria
con el campo idmaquina,nombremaquina

Albaranes
con los campos idalbaran,idobra,fecha

Lineaalbara
con los campos idalbaran,tipo,idarticulo

tipo sera igual a MAQ si es una maquina
y idarticulo seria el idmaquina para el caso de las maquinas

Yo necesito saber en que obra esta cada maquina, teniendo en cuenta que eso se verá reflejado en el ultimo albaran donde se encuentre esa maquina, ya que cada vez que haya un movimiento de la maquina se hara un albaran.

Estaria muy agradecida si alguien me pudiera ayudar
Me urge.

Muchas gracias
Montse
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

RE:MUY URGENTE: consulta SQL (valida)

Publicado por Edwin Henriquez (2 intervenciones) el 21/05/2003 17:55:58
Te quedaria mas o menos asi:

SELECT [Campos necesarios]
FROM Obras O,
Maquinaria M,
Albaranes A,
LineaAlbara L
WHERE A.IdObra = O.IdObra
AND A.IdAlbaran = L.IdAlbaran
Nota: lo que no veo es como vas a unir maquinaria por que no existe un
campo comun con las demas tablas.
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

RE:MUY URGENTE: consulta SQL (valida)

Publicado por montse (8 intervenciones) el 21/05/2003 19:45:31
Gracias pero creo que no me has entendido, asi seria facil, pero yo necesito solo la ultima fecha para cada maquina.

Maquinaria si se puede unir por el campo ccodigo de la tabla maquinaria y el campo carticulo de la tabla lialbare
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

RE:MUY URGENTE: consulta SQL (valida)

Publicado por Jerry (15 intervenciones) el 21/05/2003 23:51:11
Hola Montse...

creo que el query que buscas seria el siguiente:

SELECT A.NOMBRE AS MAQUINA, B.FechaMax as [Fecha Ultimo Mov.], D.Nombre as [Obra Actual]
FROM ##MAQUINARIA AS A
LEFT OUTER JOIN
(
SELECT C.IdArticulo, C.FechaMax, MAX(A.IdAlbaran) as MAXIDAlbaran
FROM ##ALBARANES AS A INNER JOIN ##LineaAlbara AS B ON (B.IdAlbaran = A.IdAlbaran)
INNER JOIN (
SELECT B.IdArticulo, MAX(A.Fecha) as FechaMax
FROM ##ALBARANES AS A INNER JOIN ##LineaAlbara AS B ON (B.IdAlbaran = A.IdAlbaran)
WHERE B.Tipo = 'MAQ'
GROUP BY B.IdArticulo
) AS C ON (C.IdArticulo = B.IdArticulo AND C.FechaMax = A.Fecha)
WHERE B.Tipo = 'MAQ'
GROUP BY C.IdArticulo, C.FechaMax
) AS B ON (B.IdArticulo = A.IdMaquina)
LEFT OUTER JOIN (
##ALBARANES AS C INNER JOIN ##OBRAS AS D ON (D.IdObra = C.IdObra)
) ON (C.IdAlbaran = B.MAXIDAlbaran)

Lo primero que se hace, es encontrar, para cada articulo de tipo 'MAQ', encontrar cual fue la fecha maxima de el último movimiento. Una vez que encuentras esa fecha, considerando la posibilidad de que en esa fecha maxima, se pudieron haber dado varios movimientos para un solo articulo, buscamos el maximo IdAlbaran para cada IdArticulo que tenga la fecha maxima encontrada previamente. Una vez encontrado el maximo IdAlbaran, solo tenemos que ligar tablas para obtener el nombre de la maquina y el nombre de la Obra en la que se encuentra.

Espero que te sirva.
Saludos

-Jerry-
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