首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选择5个最新的不同行

选择5个最新的不同行
EN

Stack Overflow用户
提问于 2012-10-02 07:13:22
回答 1查看 73关注 0票数 0

我的模型是这样的:

代码语言:javascript
复制
class UserRating(models.Model):

    RATING_CATEGORIES = (
        1: 'Bad',
        2: 'Boring',
        3: 'Average',
        4: 'Good',
        5: 'Great'
    )

    for_user = models.ForeignKey(User, related_name='for_user')
    by_user = models.ForeignKey(User, related_name='by_user')
    rating_category = models.IntegerField(choices=RATING_CATEGORIES)
    points = models.IntegerField(_('Points'), default=0)
    created = models.DateTimeField(_('Created'))

现在,我想根据by_userfor_user进行评级的rating_category选择5个最新的行。

我做过这样的事情:

代码语言:javascript
复制
entries = UserRating.objects.values('rating_category').filter(
        for_user=for_user,
        by_user=by_user).order_by('-created')[:5]

但是它会根据rating_category返回重复的行。

假设我有以下MySQL表条目:

代码语言:javascript
复制
id for_user by_user rating_category points         created
 1    1        1           1          100     2012-09-28 00:19:00
 2    1        1           2          100     2012-09-28 00:18:00
 3    1        1           4          100     2012-09-28 00:17:00
 4    1        1           4           0      2012-09-28 00:16:00
 5    1        1           3          100     2012-09-28 00:15:00
 6    1        1           5           0      2012-09-27 00:19:00
 7    1        1           2           0      2012-09-26 00:18:00

所需的输出为:rowid-1, rowid-2, rowid-3, rowid-5, rowid-6

仅基于rating_category的不同行,但根据created日期的latest

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-02 17:58:53

DISTINCT在这里是转移视线的。您要做的是按rating_category对记录进行分组,然后为每个组选择具有最新创建日期的记录。所以你想要一个这样的查询:

代码语言:javascript
复制
from django.db.models import Max
entries = (UserRating.objects.filter(for_user = for_user, by_user = by_user)
           .values('rating_category')
           .annotate(last_created = Max('created'))
           .order_by('-last_created'))[:5]

这将返回关键字为rating_categorylast_created的字典。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12682399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档