ooookey, I finally got it (I guess). Men, sometimes reading through lines 
of posts without examples is hard!

@all: we're circling around here because no distinctions were properly made 
in this thread for count() as a method attached to the Field vs the count() 
method attached to the table.

@Fabiano (and everyone else reading this and wanting help on "advanced 
queries"): one example with a little data is worth more than a thousand 
word.

@all: time for examples.
tests.id 
<http://127.0.0.1:8000/tests/appadmin/select/db?orderby=tests.id>   
tests.id_impressora<http://127.0.0.1:8000/tests/appadmin/select/db?orderby=tests.id_impressora>
tests.data<http://127.0.0.1:8000/tests/appadmin/select/db?orderby=tests.data>
1 <http://127.0.0.1:8000/tests/appadmin/update/db/tests/1>   
abcd2012-07-132<http://127.0.0.1:8000/tests/appadmin/update/db/tests/2>   
abcd2012-07-133 <http://127.0.0.1:8000/tests/appadmin/update/db/tests/3>   
fghi2012-07-134 <http://127.0.0.1:8000/tests/appadmin/update/db/tests/4>   
lmno2012-07-135 <http://127.0.0.1:8000/tests/appadmin/update/db/tests/5>   
lmno2012-07-136 <http://127.0.0.1:8000/tests/appadmin/update/db/tests/6>   
abcd2012-07-12
Now, what I think Fabiano wants is:
2012-07-12     1
2012-07-13     3
i.e. How many distinct id_impressora values are in the table, grouped by 
data ?

Current DAL doesn't allow this.
You can count how many rows there are for every data. 
db(db.tests.id>0).select(db.tests.data, db.tests.id_impressora.count(), 
groupby=db.tests.data)
2012-07-12     1
2012-07-13     5

You can count how many distinct records of id_impressora are in the table.
db(db.tests.id>0).count(db.tests.id_impressora)
3

And that's pretty much all about it.
@Massimo: 
now: db(db.tests.id>0)._count(db.tests.id_impressora)
        SELECT count(DISTINCT id_impressora) FROM tests WHERE (tests.id > 
0);
a) add a groupby parameter to the count() method on the table.
         db(db.tests.id>0)._count('id_impressora', groupby=db.tests.data)
         SELECT count(DISTINCT id_impressora), tests.data FROM tests WHERE 
(tests.id > 0) GROUP BY tests.data
     however, to be of some significance when grouping by something the 
field itself should be included into the select
b) add a distinct parameter to the count() method on the field
         
db(db.tests.id>0)._select(db.tests.id_impressora.count(distinct=True), 
db.tests.data, groupby=db.tests.data)
         SELECT count(DISTINCT id_impressora), tests.data FROM tests WHERE 
(tests.id >0) GROUP BY tests.data

I vote for b.

Reply via email to