On Apr 6, 2012, at 10:17 AM, Oltmans wrote:

> Greetings, I hope all are well. First off, all I'm sorry that my SQL
> isn't great.
> 
> I've a raw SQL that looks like following
> 
> select a.appointmentId, a.patientId, r.MaxTime from (
>        select appointmentid, patientid, max(apptDate) as MaxTime
>            from appointment
>            where facilityid=95
>            group by patientid
>        ) r
>    inner join
> 
>    Appointment a on
>    a.patientid = r.patientid and
>    a.apptDate = r.MaxTime
> 
> 
> I'm using declarative style of SQLAlchemy in my code and here is how
> my query looks like
> 
> appt_query = alchemy_session.query(Appointment.appointmentId,
> Appointment.patientId,
> func.max(Appointment.apptDate).label('maxTime')).filter(
> 
>            Appointment.facilityId == 95,
> 
>    ).group_by(Appointment.patientId).subquery()
> 
> 
> appointments  = alchemy_session.query(Appointment.appointmentId,
> Appointment.patientId, appt_query.c.maxTime).outerjoin(
> 
>                appt_query, and_(
>                    Appointment.patientId == appt_query.c.patientId,
>                    Appointment.apptDate == appt_query.c.maxTime
>                )
> 
>    )
> 
> but when I do
> 
> print appointments
> 
> It's unfortunately not producing the SQL that I want. I know there are
> lapses in my understanding of SQL so any pointers on this will be
> really helpful. Thank you for your time and help.

if you want the Appointment on the outside of the join to be aliased with a 
symbol like "a", you'd use a = aliased(Appointment, "a"), then use "a" as the 
thing you're joining to.

The SQL also seems to be selecting from <subquery JOIN a>, but I'm guessing you 
really want it to be OUTER JOIN in which case that order is significant, so you 
could say:

a = aliased(Appointment, "a")
q = sess.query(...).select_from(appt_query).join(a, 
and_(a.patientid==appt_query.c.patient_id, a.apptdate==appt_query.c.maxtime))


-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalchemy@googlegroups.com.
To unsubscribe from this group, send email to 
sqlalchemy+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.

Reply via email to