try below. db().select(\ db.Members.ALL,\ maxDate,\ left=\ db.MemberEvents.on(db.Members.id == db.MemberEvents.MemberID),\ having=(maxDate > date)| (db.MemberEvents.EventDate==None), \ groupby=db.Members.id)
Pai On Jun 21, 12:01 am, "Joseph S. Greenawalt" <jsgreenaw...@gmail.com> wrote: > To clarify a bit, what I'm trying to do is very similar to > this:http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-... > But with two tables that need to be joined, with dates instead of > prices, and with a "target date" that serves as a cutoff point for the > highest date (no events with dates after the target date should end up > in the results). I want one result per member in the resulting rows. > And I'd prefer to do it through the DAL, because if I don't, I'll have > to pack the results (list of tupples) into a list dictionaries, which > is too time consuming for the amount of records that I'm dealing with > (any iterative approach in python is out). > > Thanks, > Joe G. > > On Jun 20, 11:50 pm, "Joseph S. Greenawalt" <jsgreenaw...@gmail.com> > wrote: > > > Sorry for the long subject line. I've got the following tables > > (extraneous fields removed): > > > db.define_table('Members',\ > > Field("FirstName", "string"),\ > > Field("LastName", "string")) > > > db.define_table('MemberEvents',\ > > Field("MemberID", "integer"),\ > > Field("EventType", "string"),\ > > Field("EventDate", "string")) > > > The MemberEvents table holds multiple events for each member. Some > > members may have no events; I want them to show up in the results as > > well, but with Null/None values for the MemberEvents fields. What I'm > > trying to do is join these two tables in such a way that I end up with > > only the event that has the highest date that is less than a "target > > date" parameter for each member. I've tried "groupby", but I can't > > find a way to control which event is selected when the groups are > > "collapsed". I've tried all kinds of things, but with no luck so > > far. Here's my latest attempt (doesn't work): > > > maxDate = db.MemberEvents.EventDate.max() > > results = db((db.MemberEvents.EventDate<=date)).select(\ > > db.Members.ALL,\ > > db.CaseManagers.ALL,\ > > maxDate,\ > > left=\ > > db.MemberEvents.on(db.Members.id == db.MemberEvents.MemberID),\ > > groupby=db.Members.id,\ > > having=(db.MemberEvents.EventDate==maxDate)) > > > This gives an "Unknown column 'MemberEvents.EventDate' in 'having > > clause'" error. Any help would be greatly appreciated. I'd even be > > willing to paypal $30 to anyone who can solve this with the DAL (and > > provide an explanation of the solution) -- without iterating over the > > records in python (slow, I've got 10000+ event records). I need this > > to work quickly with lots of records. I've been stuck on this for > > days and have a deadline rapidly approaching. > > > Thanks in advance, > > Joe G.