2016-07-05 56 views
-1

编写组查询我有型号命名IssueFlags的列: ID,created_at,flags_id,ISSUE_ID评论如何通过

我想约flags_id信息唯一ISSUE_ID的数据(最新创建的),created_at和评论

由SQL它的工作是这样的:

SELECT created_at, flags_id, issue_id, comments 
FROM Issues_issueflags 
group by issue_id 

如何做同样在Django?我试图在外壳中写道某事,但通过

IssueFlags.objects.order_by('-created_at') 

没有属性组上面这回我只订了数据的列表。

+0

可能的重复[如何通过与Django聚合](http://stackoverflow.com/questions/13403609/how-to-group-by-and-aggregate-with-django) – Wtower

+0

帽子的无效的sql (除非你使用的是旧版本的mysql) – e4c5

回答

1

尝试这样做是这样的:

from django.db.models import Count 
IssueFlags.objects.values('created_at', 'flags_id', 'issue_id', 'comments').order_by('-created_at').annotate(total=Count('issue_id')) 

我写annotate(total=Count('issue_id'))假设你有独特的ISSUE_ID的多个条目(请注意,你可以做一切可能的类型,如点心聚合的,计数,最大值,平均值内。还有,在Django中已经存在答案,也可以看看这个link或这个link。另外,阅读这个django documentation可以清楚地知道何时在annotate()之前放置values()以及何时把它放在之后,然后根据你的要求实施学习。

如果您有任何疑问,我们将很乐意为您提供帮助。

+0

我试过了,但是在响应中我得到了表中的所有行。 – Pablo

0

我试过这个,但在响应中我得到了表中的所有行。 例如我在表中: created_at | flags_id | issue_id |评论

2011/1/1 | 1 | 21 | 'what to do?' 
2011/1/2 | 2 | 21 | 'try this' 
2011/1/3 | 1 | 46 | 'test' 
2011/1/3 | 1 | 21 | 'ok1' 
2011/1/5 | 1 | 21 | 'ok' 

查询后,我希望能有 created_at | flags_id | issue_id |评论

2011/1/3 | 1 | 46 | 'test' 
2011/1/5 | 1 | 21 | 'ok' 

在这种情况下,我需要有大约21 ISSUE_ID和46

信息我应该尝试用注释?

+0

首先,您写的内容不应作为答案发布。相反,它应该作为你的问题的编辑。这可能会让社区在未来感到困惑(因为我相信你的答案的一部分是试图回答我的答案)。 – Shubhanshu

+0

当然。抱歉。我会记住它的未来。 – Pablo

+0

从您发布的内容中作为您的要求来判断,我想您可能并不清楚您想要实现的目标以及该做什么的组合。在你的情况下,group-by会将具有issue_id = 21的所有行组合在一起,并允许你遍历与issue_id = 21相关的信息,对于id = 46也是如此。它不会压缩或聚合您的情况。 – Shubhanshu