首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django按id分组,然后选择最大时间戳

Django按id分组,然后选择最大时间戳
EN

Stack Overflow用户
提问于 2013-06-26 00:55:51
回答 2查看 968关注 0票数 1

这可能是一个多余的问题,但我已经尝试了其他相关主题的答案,但仍然无法解决。

我有一个表Board_status,如下所示(每个板的多个状态和时间戳):

代码语言:javascript
复制
time      | board_id | status
-------------------------------
2012-4-5  |        1 | good

2013-6-6  |        1 | not good

2013-6-7  |        1 | alright

2012-6-8  |        2 | good

2012-6-4  |        3 | good

2012-6-10 |        2 | good

现在,我想从Board_status表中点击所有记录,为不同的board_id按board_id对所有记录进行分组,然后在每个线路板上选择最新的状态。基本上得到这样的表(只有每个板的最新状态和时间戳):

代码语言:javascript
复制
time      | board_id | status
------------------------------
2013-6-7  |        1 | alright

2012-6-4  |        3 | good

2012-6-10 |        2 | good

我试过了:

代码语言:javascript
复制
b = Board_status.objects.values('board_id').annotate(max=Max('time')).values_list('board_id','max','status')

但它似乎不起作用。仍然可以为每个board_id提供超过1条记录。

我应该在Django中使用哪个命令来执行此操作?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-26 10:39:17

更新,这是我使用的解决方案。不是最好的,但现在可以用了:

代码语言:javascript
复制
b=[]
a = Board_status.objects.values('board_id').distinct()
for i in range(a.count()):
 b.append(Board_status.objects.filter(board_id=a[i]['board_id']).latest('time'))

所以我得到了所有的board_id,存储在列表a中,然后对每个board_id执行另一个查询,以获得最新的时间。任何更好的答案仍然是受欢迎的。

票数 1
EN

Stack Overflow用户

发布于 2013-06-26 01:53:18

它将如何工作?您既没有filter也没有distinct来过滤掉重复项。我不确定这是否可以在单个django查询中轻松完成。你应该阅读更多关于:

  1. https://docs.djangoproject.com/en/dev/ref/models/querysets/#django.db.models.query.QuerySet.distinct
  2. https://docs.djangoproject.com/en/1.4/topics/db/aggregation/

如果你不能在一个原始的sql查询中做到这一点,你也不能用OR映射器来做到这一点,因为它是建立在mysql之上的(在你的例子中)。您能告诉我如何通过原始SQL做到这一点吗?

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

https://stackoverflow.com/questions/17303194

复制
相关文章

相似问题

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