Django:自我加入桌上

时间:2018-02-27 12:53:27

标签: python django django-queryset

我想写一个像这样的查询:

SELECT COUNT(a.consumerservicerequestid), YEAR(b.statusdate), MONTH(b.statusDate), AVG(TIMEDIFF(a.statusDate, b.statusdate)) 
FROM consumer_servicerequest_log a, consumer_servicerequest_log b 
WHERE a.consumerservicerequestid=b.consumerservicerequestid 
     AND a.status="Parts received" 
     OR b.status IN ("Parts pending","Parts request accepted") 
GROUP BY YEAR(b.statusdate), MONTH(b.statusdate);

有没有办法在Django ORM中做到这一点?

1 个答案:

答案 0 :(得分:0)

如果没有看到你的模型就很难回答这个问题,但我相信你可以做复杂的查找

  • 对于计数,您执行Model.objects.annotate(count=Count(MODEL_FIELD))
  • 对于日期对象,您可以执行以下操作,具体取决于日期对象在DB中的保存方式

    .annotate(hour=Round(F('connection_timestamp') % (3600 * 24) /3600))

  • 对于Avg,您可以使用aggregate方法

  • filter过滤字段值的方法