【问题标题】:Django ORM data based on max date group基于最大日期组的 Django ORM 数据
【发布时间】: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'))

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

【问题讨论】:

  • 你想要所有的报价以及他们的股票的最大日期吗?
  • 是的,我希望在他们的库存最大日期之前达到最大值

标签: python-3.x django django-models django-orm


【解决方案1】:

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

  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)
  1. 按valid_till 订购。这假设您有一个最大日期。
max_date_quote = quote.objects.all().order_by('-valid_till').first()

【讨论】:

  • 没有每只股票的最大日期
猜你喜欢
  • 2021-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-10
  • 2016-01-09
  • 1970-01-01
  • 2020-11-12
相关资源
最近更新 更多