SELECT count(user_min.user_id_id), date(user_min.date_time) from
((SELECT MIN(date(date_time)) as date_time,user_id_id FROM `pied_visit` WHERE branch_id_id IN (5,6,9) GROUP BY user_id_id) user_min)
GROUP BY date(user_min.date_time)
在很多地方搜索过。但找不到任何有用的东西。
答案 0 :(得分:0)
这是一种奇怪的SQL查询。我不确定是否有可能在一个声明中做到这一点。
让我们从这个子查询开始:
SELECT MIN(date(date_time)) as date_time,user_id_id FROM "pied_visit" WHERE branch_id_id IN (5,6,9) GROUP BY user_id_id) user_min
据我所知,没有办法在Django中提供表别名,所以如果别名对于它在外部查询中起作用很重要,并且PiedVisit
是Django的模型名称SQL表pied_visit
,我们可以这样得到它:
p = PiedVisit.objects.values('user_id_id').annotate(new_date_time=Min(TruncDate(date_time)).filter(branch_id_id__in=[5,6,9])
以上示例仅适用于Django 1.10及更高版本,因为TruncDate
在较低版本中不可用。您必须使用.extra()
queryset API并为旧版本插入原始SQL。
无论早期声明的结果如何,您只需使用列表推导和集合在Python中进行处理。
from collections import Counter
c = Counter([row['new_date_time'] for row in p])
dict(c)
您最终会得到一个dict
,其键是日期,相应的值将是计数。