Django:自我加入桌上

问题描述 投票:0回答:1

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

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中做到这一点?

python django django-queryset
1个回答
0
投票

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

  • 为了伯爵,你做Model.objects.annotate(count=Count(MODEL_FIELD))
  • 对于日期对象,您可以执行以下操作,具体取决于日期对象在数据库中的保存方式 .annotate(hour=Round(F('connection_timestamp') % (3600 * 24) /3600))
  • 对于Avg,您可以使用aggregate方法
  • 并且,filter方法用于过滤字段值
© www.soinside.com 2019 - 2024. All rights reserved.