如何使用Django ORM从时间戳字段按日期分组?

时间:2017-05-04 13:00:21

标签: python mysql django django-models

我有这个特定于MySQL的查询

SELECT SUM(trip_amount) as tp , DATE(FROM_UNIXTIME(request_time))  as timestamp 
FROM trip_master 
WHERE trip_master.date > 1493836200 
AND trip_master.date < 1493922600 
AND trip_master.id = 6  
GROUP BY timestamp

在Django中实现了这个查询,

Trip.objects.filter(id=userid,date__gt = start,date__lt = end).annotate(trip_amount = Sum('trip_amount')).extra({'timestamp':'DATE(FROM_UNIXTIME(request_time))'})

根据定义,我必须将时间戳转换为日期,以便从日期进行分组。达到了几乎水平但没有按日期分组。 非常感谢任何帮助

1 个答案:

答案 0 :(得分:1)

尝试:

from django.db.models.expressions import RawSQL  

Trip.objects.filter(
    id=userid,
    date__gt=start,
    date__lt=end
).annotate(
    timestamp=RawSQL('DATE(FROM_UNIXTIME(request_time))', [])
).values(
    'timestamp'
).annotate(
    trip_amount=Sum('trip_amount')
)

请参阅Group objects by dates