есть таблица с одним из полей типа DateTime в субд pgsql
как выполнить агрегацию по часам?
( чтобы показало сколько записей в таблице в течении каждого часа)
( чтобы запрос вернул 24 числа )
qs = QuerySet.objects.filter().extra(select={'hour': 'extract (hour from "appname_tablename".datefieldname)'}).order_by('hour')
from itertools import groupby items = groupby(qs, lambda x: x.hour)
[(0, [<записи относящиеся к 0-му часу>]), (1, [<записи относящиеся к 1-му часу>]), и т.д]
lead-in
1) Из каждой даты вытащить конкретный час:
qs = QuerySet.objects.filter().extra(select={'hour': ‘extract (hour from “appname_tablename”.datefieldname)’}).order_by('hour')
cursor = connection.cursor() cursor.execute("""select extract( hour from "killTime" ) as a1,count(*) as cnt from analizer_kill where "characterID"=%s group by a1 having count(*)>%s order by cnt desc;""",[pilot_id,sign_kill]) r=cursor.fetchall() time_slice=[] for i in r: d={} d["hour"]=int(i[0]) d["kills"]=i[1] time_slice.append(d)
тут сразу и посчитать количество, зачем через itertools извращаться?
from django.db.models import Count qs = QuerySet.objects.filter().extra(select={'hour': '''extract( hour from "killTime" )'''}).values('hour').annotate(Count('id'))
сюда sql инъекцию не всунут? pilot_id поступает как часть url