这可能是一个多余的问题,但我已经尝试了其他相关主题的答案,但仍然无法解决。
我有一个表Board_status,如下所示(每个板的多个状态和时间戳):
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对所有记录进行分组,然后在每个线路板上选择最新的状态。基本上得到这样的表(只有每个板的最新状态和时间戳):
time | board_id | status
------------------------------
2013-6-7 | 1 | alright
2012-6-4 | 3 | good
2012-6-10 | 2 | good我试过了:
b = Board_status.objects.values('board_id').annotate(max=Max('time')).values_list('board_id','max','status')但它似乎不起作用。仍然可以为每个board_id提供超过1条记录。
我应该在Django中使用哪个命令来执行此操作?
发布于 2013-06-26 10:39:17
更新,这是我使用的解决方案。不是最好的,但现在可以用了:
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执行另一个查询,以获得最新的时间。任何更好的答案仍然是受欢迎的。
发布于 2013-06-26 01:53:18
它将如何工作?您既没有filter也没有distinct来过滤掉重复项。我不确定这是否可以在单个django查询中轻松完成。你应该阅读更多关于:
如果你不能在一个原始的sql查询中做到这一点,你也不能用OR映射器来做到这一点,因为它是建立在mysql之上的(在你的例子中)。您能告诉我如何通过原始SQL做到这一点吗?
https://stackoverflow.com/questions/17303194
复制相似问题