我想找到高于一年前同一天价格的股票价格。我如何运行 django 查询来获取这些价格?
from django.db import models
class Ticker(models.Model):
symbol = models.CharField(max_length=50, unique=True)
class TickerPrice(models.Model):
ticker = models.ForeignKey(
Ticker, on_delete=models.CASCADE, related_name="ticker_prices"
)
price = models.DecimalField(max_digits=7, decimal_places=2)
close_date = models.DateField()
我想像下面这样运行查询,但不知道如何获取 ticker_price_a_year_ago。
TickerPrice.objects.filter(price__gte=ticker_price_a_year_ago).
一种方法是使用子查询,像这样:
import datetime
from django.db.models import F, OuterRef, Subquery
last_year = datetime.datetime.utcnow().date() - datetime.timedelta(days=365)
last_year_ticker_price_subquery = TickerPrice.objects.filter(
ticker=OuterRef('ticker'),
close_date__date=last_year,
).order_by('-close_date')
TickerPrice.objects.annotate(
last_year_ticker_price=Subquery(last_year_ticker_price_subquery.values("price")[:1])
).filter(
price__gte=F("last_year_ticker_price"),
)