Hi Massimo, 
thanks for the suggestions, at this point I have to understand what to do:
- use your last proposal but in this case the date is no longer a data 
object but three different columns, and this will lead to a more difficult 
logic
- put a date field in the table definition, this may simplify all the 
things, isn't it?
I will check it later this week-end.
Thanks
Paolo

On Wednesday, October 17, 2012 7:25:59 PM UTC+2, Massimo Di Pierro wrote:
>
> It should work with python 2.7 but not previous version. You can also do:
>
> s=db.club.created_on.year() | db.club.created_on.month() | 
> db.club.created_on.day() 
> dates = 
> db(query).select(db.club.created_on.year(),db.club.created_on.month(),db.club.created_on.day()
>  ,
>               count,orderby=~s, limitby=limitby, groupby=s)
>
>
> On Wednesday, 17 October 2012 11:54:29 UTC-5, Paolo wrote:
>>
>> Hi Massimo, thanks for the suggested query but unfortunately I got this 
>> error:
>>
>> Traceback (most recent call last):
>>   File "/home/paolo/Dropbox/git/web2py/gluon/restricted.py", line 208, in 
>> restricted
>>     ccode = compile2(code,layer)
>>   File "/home/paolo/Dropbox/git/web2py/gluon/restricted.py", line 193, in 
>> compile2
>>     return compile(code.rstrip().replace('\r\n','\n')+'\n', layer, 'exec')
>>   File "/home/paolo/Dropbox/git/web2py/applications/bikend/models/clubDB.py" 
>> <http://127.0.0.1:8000/admin/default/edit/bikend/models/clubDB.py>, line 29
>>     dates = db(query).select(*s,count,orderby=~join(s), limitby=limitby, 
>> groupby=join(s))
>> SyntaxError: only named arguments may follow *expression
>>
>> If that can help, I've tried without the wildcard but it failed, web2py 
>> was blocked and python took 100% of the cpu.
>>
>> Paolo
>>
>> On Wednesday, October 17, 2012 2:35:23 PM UTC+2, Massimo Di Pierro wrote:
>>>
>>>
>>> s=db.club.created_on.year(),db.club.created_on.month(),db.club.created_on.day()
>>>  
>>> def join(s): return reduce(lambda a,b:a|b,s)
>>> dates = db(query).select(*s,count,orderby=~join(s), limitby=limitby, 
>>> groupby=join(s))
>>>
>>> On Wednesday, 17 October 2012 01:31:55 UTC-5, Paolo wrote:
>>>>
>>>> Hi Cliff,
>>>> I got the reasons of postgres, but I don't know how to fix it. The 
>>>> query is actually very simple, I have several post, I want to group them 
>>>> by 
>>>> s, and get the number of post for each s. Where s is:
>>>> s=db.club.created_on.year() | db.club.created_on.month() | 
>>>> db.club.created_on.day() 
>>>> In the select I may created_on and use s instead, something like that:
>>>> dates = db(query).select(s,count,orderby=~s, limitby=limitby, groupby=s)
>>>>
>>>> but doing that I got this error:
>>>> 2012-10-17 08:27:59,210 - web2py - ERROR - Traceback (most recent call 
>>>> last):
>>>>   File "/home/paolo/Dropbox/git/web2py/gluon/restricted.py", line 209, 
>>>> in restricted
>>>>     exec ccode in environment
>>>>   File 
>>>> "/home/paolo/Dropbox/git/web2py/applications/bikend/controllers/club.py", 
>>>> line 140, in <module>
>>>>   File "/home/paolo/Dropbox/git/web2py/gluon/globals.py", line 184, in 
>>>> <lambda>
>>>>     self._caller = lambda f: f()
>>>>   File 
>>>> "/home/paolo/Dropbox/git/web2py/applications/bikend/controllers/club.py", 
>>>> line 3, in index
>>>>     d= dict(clubs = get_clubs())
>>>>   File 
>>>> "/home/paolo/Dropbox/git/web2py/applications/bikend/models/clubDB.py", 
>>>> line 
>>>> 25, in get_clubs
>>>>     dates = db(query).select(s,count,orderby=~s, limitby=limitby, 
>>>> groupby=s)
>>>>   File "/home/paolo/Dropbox/git/web2py/gluon/dal.py", line 8787, in 
>>>> select
>>>>     return adapter.select(self.query,fields,attributes)
>>>>   File "/home/paolo/Dropbox/git/web2py/gluon/dal.py", line 2127, in 
>>>> select
>>>>     return super(SQLiteAdapter, self).select(query, fields, attributes)
>>>>   File "/home/paolo/Dropbox/git/web2py/gluon/dal.py", line 1615, in 
>>>> select
>>>>     return self._select_aux(sql,fields,attributes)
>>>>   File "/home/paolo/Dropbox/git/web2py/gluon/dal.py", line 1596, in 
>>>> _select_aux
>>>>     return processor(rows,fields,self._colnames,cacheable=cacheable)
>>>>   File "/home/paolo/Dropbox/git/web2py/gluon/dal.py", line 1974, in 
>>>> parse
>>>>     fields[j].type,blob_decode)
>>>> IndexError: list index out of range
>>>>
>>>> Paolo
>>>>
>>>> On Wednesday, October 17, 2012 4:45:35 AM UTC+2, Cliff Kachinske wrote:
>>>>>
>>>>> I don't know how it possibly worked in sqlite, but this is an 
>>>>> aggregate query combined with a non-aggregate query.
>>>>>
>>>>> In other words, the count is a property of an aggregation of rows in 
>>>>> the database, whereas created_on is a property of individual rows.
>>>>>
>>>>> This confuses Postgres.  It doesn't know if you want the aggregate 
>>>>> result (count) or the result for individual rows (created_on).  It cannot 
>>>>> deliver both from the same query.
>>>>>
>>>>> What are you trying to find out in your query?
>>>>>
>>>>>
>>>>>
>>>>> On Tuesday, October 16, 2012 4:59:36 PM UTC-4, Paolo wrote:
>>>>>>
>>>>>> Dear all, 
>>>>>> I've just switched from sqlite to postgres, and now I have problems 
>>>>>> with few queries.
>>>>>> One query that works correctly on sqlite and fails on postgres is the 
>>>>>> following:
>>>>>>     s=db.club.created_on.year() | db.club.created_on.month() | 
>>>>>> db.club.created_on.day() 
>>>>>>     count = db.club.id.count()
>>>>>>     dates = 
>>>>>> db(query).select(db.club.created_on,count,orderby=~db.club.created_on, 
>>>>>> limitby=limitby, groupby=s)
>>>>>>
>>>>>> Now on postgres, it raises the following error:
>>>>>> ProgrammingError: column "club.created_on" must appear in the GROUP 
>>>>>> BY clause or be used in an aggregate function
>>>>>> LINE 1: SELECT  club.created_on, COUNT(club.id) FROM club WHERE 
>>>>>> (((c...
>>>>>>
>>>>>> I read online that the fields in the select must be on the groupby as 
>>>>>> well. The problem is that by grouping even by club.created_on (by adding 
>>>>>> groupby=s | club.created_on)  the result is totally different. What can 
>>>>>> I 
>>>>>> do to tackle this problem?
>>>>>>
>>>>>> Best,
>>>>>> Paolo
>>>>>>
>>>>>

-- 



Reply via email to