I'm using SA 0.8.2 and trying to port this query that works with PostgreSQL 
9.2.4:

WITH distinct_query AS (
    SELECT DISTINCT ON (refid) *
        FROM appl
        WHERE lastname ILIKE 'Williamson%' AND firstname ILIKE 'd%'
        GROUP BY refid, id, lastname, firstname, appldate
        ORDER BY refid, appldate DESC
)
SELECT * FROM distinct_query ORDER BY lastname, firstname;

I've worked on this quite a while and I'm stuck. I've tried every construct in 
the docs that looks like it might work without success (subquery, join, select, 
etc). Here's what I've been referencing most recently that I think is the 
closest to what I want:

http://docs.sqlalchemy.org/en/rel_0_8/orm/query.html?highlight=cte#sqlalchemy.orm.query.Query.cte

Here's what I have so far:

        qlast, qfirst = params['query'].split(' ', 1)
        subq = DBSession.query(Appl).\
            distinct(Appl.refid).\
            filter(getattr(Appl, 'lastname').match(qlast)).\
            filter(getattr(Appl, 'firstname').ilike(qfirst+'%')).\
            group_by(Appl.refid).\
            group_by(Appl.appldate).\
            order_by(Appl.refid).\
            order_by(Appl.appldate.desc()).\
            cte('distinct_query')
        a = aliased(subq, name='distinct_query_alias')
        rows = DBSession.query(Appl).\
            order_by(a.c.lastname.asc()).\
            order_by(a.c.firstname.asc()).\
            order_by(a.c.middlename.asc())

Below is the error output. Sorry for the length of output; I elided as much as 
possible, but didn't want to remove anything that might be important:

(ProgrammingError) missing FROM-clause entry for table "distinct_query_alias"
LINE 2: ...race_2 ON race_2.id = applbenef_1.raceid ORDER BY distinct_q...
                                                             ^
'SELECT appl.id AS appl_id, appl.refid AS appl_refid, 
appl.appldate AS appl_appldate, appl.lastname AS appl_lastname, 
appl.firstname AS appl_firstname, appl.middlename AS appl_middlename, 
appl.cityid AS appl_cityid, appl.cityid2 AS appl_cityid2, 
appl.raceid AS appl_raceid, appl.maritalid AS appl_maritalid, 
appl.referral AS appl_referral, 
city_1.id AS city_1_id, city_1.name AS city_1_name, 
[... city_1.xxx AS city_1_xxx ...]
city_2.id AS city_2_id, city_2.name AS city_2_name, 
[... city_2.xxx AS city_2_xxx ...], 
race_1.id AS race_1_id, race_1.name AS race_1_name, 
race_1.race AS race_1_race, race_1.rowcreated AS race_1_rowcreated, 
race_1.rowmodified AS race_1_rowmodified, 
marital_1.id AS marital_1_id, marital_1.name AS marital_1_name, 
marital_1.marital AS marital_1_marital, 
marital_1.rowcreated AS marital_1_rowcreated, 
marital_1.rowmodified AS marital_1_rowmodified, 
agency_1.id AS agency_1_id, agency_1.name AS agency_1_name, 
[... agency_1.xxx AS agency_1_xxx ...], 
applreferrer_1.id AS applreferrer_1_id, 
applreferrer_1.applid AS applreferrer_1_applid, 
applreferrer_1.agencyid AS applreferrer_1_agencyid, 
[... applreferrer_1.xxx AS applreferrer_1_xxx ...], 
applsponsor_1.id AS applsponsor_1_id, 
applsponsor_1.applid AS applsponsor_1_applid, 
[... applsponsor_1.xxx AS applsponsor_1_xxx ...], 
race_2.id AS race_2_id, race_2.name AS race_2_name, 
race_2.race AS race_2_race, race_2.rowcreated AS race_2_rowcreated, 
race_2.rowmodified AS race_2_rowmodified, 
applbenef_1.id AS applbenef_1_id, 
applbenef_1.applid AS applbenef_1_applid, 
applbenef_1.lastname AS applbenef_1_lastname, 
applbenef_1.firstname AS applbenef_1_firstname, 
applbenef_1.age AS applbenef_1_age, 
applbenef_1.raceid AS applbenef_1_raceid, 
applbenef_1.notes AS applbenef_1_notes, 
applbenef_1.rowcreated AS applbenef_1_rowcreated, 
applbenef_1.rowmodified AS applbenef_1_rowmodified \n
FROM appl 
LEFT OUTER JOIN city AS city_1 ON city_1.id = appl.cityid 
LEFT OUTER JOIN city AS city_2 ON city_2.id = appl.cityid2 
LEFT OUTER JOIN race AS race_1 ON race_1.id = appl.raceid 
LEFT OUTER JOIN marital AS marital_1 ON marital_1.id = appl.maritalid 
LEFT OUTER JOIN applreferrer AS applreferrer_1 ON appl.id = 
applreferrer_1.applid 
LEFT OUTER JOIN agency AS agency_1 ON agency_1.id = applreferrer_1.agencyid 
LEFT OUTER JOIN applsponsor AS applsponsor_1 ON appl.id = applsponsor_1.applid 
LEFT OUTER JOIN applbenef AS applbenef_1 ON appl.id = applbenef_1.applid 
LEFT OUTER JOIN race AS race_2 ON race_2.id = applbenef_1.raceid 
ORDER BY 
  distinct_query_alias.lastname ASC, 
  distinct_query_alias.firstname ASC, 
  distinct_query_alias.middlename ASC, 
  applreferrer_1.id, 
  applsponsor_1.id, 
  applbenef_1.id' {}

class Appl(Base):
    __tablename__ = 'appl'
    id          = Column(Integer, primary_key=True)
    refid       = Column(Integer, Sequence('appl_refid_seq'))
    appldate    = Column(Date)
    lastname    = Column(Unicode(50))
    firstname   = Column(Unicode(50))
    middlename  = Column(Unicode(50))
    cityid      = Column(Integer, ForeignKey('city.id'))
    cityid2     = Column(Integer, ForeignKey('city.id'))
    raceid      = Column(Integer, ForeignKey('race.id'))
    maritalid   = Column(Integer, ForeignKey('marital.id'))
    #
    city         = relationship('City', lazy='joined', 
primaryjoin='City.id==Appl.cityid')
    city2        = relationship('City', lazy='joined', 
primaryjoin='City.id==Appl.cityid2')
    race         = relationship('Race', lazy='joined')
    marital      = relationship('Marital', lazy='joined')
    applrefs     = relationship('ApplReferrer', cascade="all, delete, 
delete-orphan",
                                lazy='joined', order_by='ApplReferrer.id')
    applsponsors = relationship('ApplSponsor', backref='appl', cascade="all, 
delete, delete-orphan",
                                lazy='joined', order_by='ApplSponsor.id')
    applbenefs   = relationship('ApplBenef', cascade="all, delete, 
delete-orphan",
                                lazy='joined', order_by='ApplBenef.id')

Please let me know if you need more info. Thanks!

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to