我有一个 Django 模型,它(极度简化)看起来像这样:
class MyModel(models.Model):
date = models.DateTimeField()
number = models.PositiveIntegerField()
我希望能够获取一份独特的数字列表,按它们出现的时间顺序(倒序)排列。
例如,对于以下数据(日期
按照更好的可读性进行排序):
date | number
-------------+-------
24/12/2014 | 12
23/12/2014 | 8
22/12/2014 | 8
21/12/2014 | 5
20/12/2014 | 12
19/12/2014 | 5
18/12/2014 | 14
我将获得以下类似列表:
```HTML
我将得到以下列表:
```[12, 8, 5, 14]
直观地,我会像这样编写查询:
MyModel.objects.order_by('-date').distinct('number')
但这是无效的ORM代码。
我该如何解决这个问题?
请注意,所涉及的表可能包含数百万行,其中可能有很多重复的number
,因此我不能用“幼稚”的方式解决这个问题(例如,从MyModel.objects.order_by('-date')
迭代行,并在运行时选择未被看到的number
)。
set
是无序的。因此,不能保证number
值的顺序正确。此外,这将导致整个查询集被评估,如果你有数百万行数据,这将会带来问题。 - bitgarden