基于最大日期组的 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?