基于最大日期组的 Django ORM 数据

Posted

技术标签:

【中文标题】基于最大日期组的 Django ORM 数据【英文标题】:Django ORM data based on max date group 【发布时间】:2022-01-15 17:13:53 【问题描述】:

型号

class quote(models.Model):
    id = models.AutoField(primary_key=True)
    stock = models.ForeignKey(stock, related_name='stock', on_delete=models.CASCADE)
    price = models.DecimalField(max_digits=30,decimal_places=5)
    valid_till = models.DateTimeField()
    created_at = models.DateTimeField() #time
    updated_at = models.DateTimeField(blank=True,null=True)

前数据

id stock price valid_till created_at
1. 1.    200.  09 April.   09 April 
2. 1.    300.  10 April.   09 April 
3. 2.    100.  07 April.   07 April 
4. 2.    200.  08 April.   08 April 

输出欲望

id stock price valid_till created_at
2. 1.    300.  10 April.   09 April 
4. 2.    200.  08 April.   08 April 

我只需要记录每只股票的最大日期

目前正在做 quote.objects.values('stock__symbol').annotate(max_date=Max('valid_till'))

但仍然无法考虑适当的解决方案

【问题讨论】:

你想要所有的报价以及他们的股票的最大日期吗? 是的,我希望在他们的库存最大日期之前达到最大值 【参考方案1】:

这里有两种获取最大日期报价的方法。使用该查询集,您可以找到所需的任何相关模型实例。

    使用 aggregate() 方法查找最大值,然后查询过滤最大值
# returns a dict containing your max_date
aggregation = quote.objects.aggregate(max_date=Max('valid_till'))

# get max_date from dict
max_date = aggregation['max_date']

#filter quotes based on max_date
max_date_quotes = quote.objects.filter(valid_till = max_date)
    按valid_till 订购。这假设您有一个最大日期。
max_date_quote = quote.objects.all().order_by('-valid_till').first()

【讨论】:

没有每只股票的最大日期

以上是关于基于最大日期组的 Django ORM 数据的主要内容,如果未能解决你的问题,请参考以下文章

根据最大日期获取每组的最新行

如何在 PostgreSQL 中按类别选择具有最大日期组的 id?

返回 Netezza SQL 中每个组的最大值日期

如何在django中将QuerySet过滤到每个组的最大成员?

Django ORM按两个相关模型的最大列值过滤

仅在最大日期而不是在组的其他条目中显示具有特定值的组