you're thinking with a human mind instead of thinking on how a database works... with sets of data.
How can you ask a database to return a single set grouped by something and at the same time as for granular records??? When you use groupby, you can just ask for granular records of the columns you grouped for AND aggregates on every other (min, max, count, sum, avg, count distinct, etc). id--name--variety 1--apple--fruit 2--pear--fruit 3--salad--vegetable 4--spinach--vegetable 5--spinach--vegetable Let's answer "Please, tell me how many varieties I hold"... Two. You can have 2 lines back if you group by variety. No more, no less. "Ok, database, tell me how many of each variety I have" Always two lines, no more, no less. In addition to variety, you ask for the count of each. count--variety 2--fruit 3--vegetable "Ok, database, tell me how many names there are for each variety" Always two lines. In addition, you ask for the count distinct of fruits count distinct--variety 2--fruit 2--vegetable In set theory, THERE'S no way to ask for the id of the original row if you're grouping by something. However, you can nest queries (or use windowing functions, that ATM aren't in pydal) to first ask the database to group, and then select a record that matches the grouped property plus the aggregate you chose, like "the row in the group that has that variety and has the last id (which is max())". the first set would be max(id)--variety 2--fruit 5--vegetable and the second a join to the original, returning 2--pear--fruit 5--spinach--vegetable sooooo.... you can have the latest version_date for each item_id (which correspond to max(version_date) for each group), but you can't ask for anything more which isn't an aggregate, like the item name, in a single shot. At least without resorting to more complicated queries. On Thursday, August 25, 2016 at 7:52:23 AM UTC+2, Encompass solutions wrote: > > I suppose your right, but I was a little thrown, by the: > max(variable_here) > That was mentioned was not the solution at all, I kept looking for ways to > use max as a function. > My issue now, is that the group by doesn't like me getting all the tables > I want in the return. > BR, > Jason Brower > > On Thursday, August 25, 2016 at 8:36:58 AM UTC+3, Dave S wrote: >> >> >> >> On Wednesday, August 24, 2016 at 10:29:09 PM UTC-7, Encompass solutions >> wrote: >>> >>> Does this seem sensible? It seems to work with my initial tests. >>> >>> latest_versions = db( (db.item.id == db.item_version.artifact_id) & >>> (db.item_version.id > 0) >>> >>> ).select(db.item.ALL,db.item_version.version_date.max(), groupby= >>> db.item.id) >>> >>> the .max() feature, at least what I found, was totally undocumented. >>> >> >> Totally? >> You mean, there isn't >> >> <URL: >> http://web2py.com/books/default/chapter/29/06/the-database-abstraction-layer#sum--avg--min--max-and-len >> > >> >> ? >> >> We should have an example database as part of the documentation with a >>> collection of examples around it so we can all relate better. :/ >>> >>> >> Examples in book, using it on severity of logged events. >> >> /dps >> >> >>> On Monday, August 22, 2016 at 10:52:55 AM UTC+3, Encompass solutions >>> wrote: >>>> >>>> Consider the following pseudo model. >>>> >>>> item >>>> ->name = "string" >>>> >>>> version >>>> ->item_id = item.id >>>> ->version_date = "datetime" >>>> >>>> >>>> While I can easily create a collection of the item with it's versions. >>>> all_items = db((db.item.id > 0) & (db.version.item_id == db.item.id >>>> )).select(orderby=db.item.name | db.version.version_date) >>>> >>>> How do get just all items with just the latest version of each item >>>> without having to do this.... >>>> items = [] >>>> current_id = all_items.first().item.id >>>> for thing in all_items: >>>> if thing.item.id != current_id: >>>> current_id = thing.item.id >>>> items.append(thing) >>>> >>>> It seems a bit silly and heavy to be doing this especially since my >>>> data could get quite large. I imaging the database has some way to do >>>> this, just never learned how. >>>> >>>> Ideas on how this could be done? >>>> >>>> BR, >>>> Jason Brower >>>> >>>> -- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.

