这可能是一个多余的问题,但我已尝试过其他相关主题的先前答案,但仍然无法弄明白。
我有一个表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中使用哪个命令来执行此操作?
答案 0 :(得分:1)
更新,这是我使用的解决方案。不是最好的,但它现在有效:
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 :(得分:0)
它将如何运作?您既没有过滤器也没有区别来过滤掉重复项。我不确定这是否可以在单个django查询中轻松完成。你应该阅读更多内容:
如果你不能在1个原始sql查询中执行它,你不能使用OR映射器,因为它构建在mysql之上(在你的情况下)。你能告诉我你将如何通过原始SQL做到这一点吗?