Te recomendamos que pruebes esta respuesta en un ambiente controlado antes de pasarlo a producción, saludos.
Solución:
Ya casi has llegado. Haga una subconsulta “seleccionable” y únala con la consulta principal a través de join()
:
foo_max_time_q = select([func.max(Foo.time).label('foo_max_time'),
Foo.id.label('foo_id')
]).group_by(Foo.id
).alias("foo_max_time_q")
foo_q = session.query(
Foo.id.label('foo_id'),
Foo.version.label('foo_version'),
Foo.revision.label('foo_revision'),
foo_max_time_q.c.foo_max_time.label('foo_max_time')
).join(foo_max_time_q,
foo_max_time_q.c.foo_id == Foo.id)
print(foo_q.__str__())
Estampados (embellecidos manualmente):
SELECT
foo.id AS foo_id,
foo.version AS foo_version,
foo.revision AS foo_revision,
foo_max_time_q.foo_max_time AS foo_max_time
FROM
foo
JOIN
(SELECT
max(foo.time) AS foo_max_time,
foo.id AS foo_id
FROM
foo
GROUP BY foo.id) AS foo_max_time_q
ON
foo_max_time_q.foo_id = foo.id
El código de trabajo completo está disponible en este gist.
Aquí tienes las reseñas y calificaciones
Si posees alguna vacilación y disposición de progresar nuestro división te evocamos realizar una apostilla y con placer lo leeremos.
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)