Ir al contenido


Foto

Relacionar tres tablas y btener totales (SUM, COUNT, MAX)


  • Por favor identifícate para responder
2 respuestas en este tema

#1 cannabis

cannabis

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 257 mensajes
  • LocationMéxico

Escrito 07 noviembre 2009 - 12:04

En Firebird 2.0 tengo tres tablas:

- Animales (Animal_ID, Lote_ID)
- Lotes    (Lote_ID, Lote_Nom)
- Pesajes  (Animal_ID, FechaPesaje, Peso)

En un query quiero sumar el último peso de cada animal y agruparlo por el Lote, además del peso más alto y el peso más bajo, la diferencia entre ambos y el peso promedio de cada lote.

LOTE 1 - 5948
LOTE 2 - 9484
LOTE 3 - 8764
etc.

He intentado de todo (hasta dedicarme a otro oficio) y buscado en san google, pero no encuentro la solución.

¿Algún alma caritativa que pueda ayudarme?


Salud.

  • 0

#2 cannabis

cannabis

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 257 mensajes
  • LocationMéxico

Escrito 07 noviembre 2009 - 12:27

Encontré la solucion:



delphi
  1. SELECT Lotes.Lote_Nom, SUM(Pesajes.Peso)
  2. FROM Animales, Lotes, Pesajes
  3. WHERE Lotes.Lote_ID = Animales.Lote_ID
  4. AND Pesajes.Animal_ID = Animales.Animal_ID
  5. AND Pesajes.FechaPesaje = (SELECT MAX(FechaPesaje) FROM Pesajes WHERE Pesajes.Animal_ID = Animales.Animal_ID)
  6. GROUP BY Lote_Nom




Salud.

  • 0

#3 cannabis

cannabis

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 257 mensajes
  • LocationMéxico

Escrito 07 noviembre 2009 - 12:41

¡Corrección!

Esta es la solución:



delphi
  1. SELECT Lotes.Lote_Nom,
  2. SUM(Pesajes.Peso) AS PesoTotal,
  3. MAX(Pesajes.Peso) AS PesoMayor,
  4. Min(Pesajes.Peso) AS PesoMenor,
  5. ((MAX(Pesajes.Peso) - MIN(Pesajes.Peso))) AS Diferencia
  6. FROM Animales, Lotes, Pesajes
  7. WHERE Lotes.Lote_ID = Animales.Lote_ID
  8. AND Pesajes.Animal_ID = Animales.Animal_ID
  9. AND Pesajes.FechaPesaje = (SELECT MAX(FechaPesaje) FROM Pesajes WHERE Pesajes.Animal_ID = Animales.Animal_ID)
  10. GROUP BY Lote_Nom




Salud.

  • 0




IP.Board spam blocked by CleanTalk.