1

这可能是一个多余的问题,但我已经尝试过其他相关主题的先前答案,但仍然无法弄清楚。

我有一个表 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 中使用哪个命令来执行此操作?

4

2 回答 2

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,再进行一次查询以获取最新时间。仍然欢迎任何更好的答案。

于 2013-06-26T02:39:17.287 回答
0

它将如何运作?您既没有过滤器也没有不同的过滤器来过滤掉重复项。我不确定这是否可以在单个 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/

如果您不能在 1 个原始 sql 查询中执行此操作,那么您也无法使用 OR 映射器来执行此操作,因为它构建在 mysql 之上(在您的情况下)。你能告诉我你将如何通过原始 SQL 做到这一点吗?

于 2013-06-25T17:53:17.687 回答