Django - 获取具有最新时间的对象

时间:2017-03-27 08:56:31

标签: sql django postgresql orm django-orm

我有一个模型Scan。一天内每个Car有多次扫描。 每次扫描都有日期时间。

编辑:已更改 - 可以从扫描对象直接访问日期时间 EDIT2:

这种方法有效,但它选择白天的第一次扫描,而不是最后一次扫描。

car.scans.filter(valid=True).distinct('date')

class Car...
    ...

class Scan...
    datetime = DateTimeField...
    scanning = ForeignKey('Scanning'...
    car = ForeignKey('Car'...
    value = IntegerField(...
    valid = BooleanField(...

现在我想为汽车创建一个图表。会有日子和价值观。对于每一天,只有一个值(最新的有效值)。

由于每天可以进行多次扫描,我希望在一天内完成最后一次扫描。

                  汽车         约会时间         值               
             1         01.05.2017 01:00 am         1     
             1         01.05.2017 02:00 am         4     
             1         01.05.2017 04:00 am         8     
             1         02.05.2017 01:00 am         12     
             1         03.05.2017 01:00 am         7     
             1         03.05.2017 02:00 am         五     
             1         03.05.2017 03:00 am         6     
             1         03.05.2017 08:00 am         9          

<小时/> 结果将是:

01.05.2017 - 8

02.05.2017 - 12

03.05.2017 - 9

我只想到我想知道日期列表和每个日期,获取所有扫描 - 然后拉最后一次扫描。

但我正试图找到一种更有效的方法,因为可以进行数千次扫描。

你知道该怎么办吗?

1 个答案:

答案 0 :(得分:0)

读取的最佳方法是使用中间表来保存每辆车的最后状态。这将涉及一些额外的更新,但最终阅读将很容易。

其他方法是将查询与子选择一起用作

Scan.objects.annotate(max_date=Max('car__scan__datetime')).filter(date=F('max_date'))