Django查询一年前股价

问题描述 投票:0回答:1

我想找到高于一年前同一天价格的股票价格。我如何运行 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).
django django-queryset
1个回答
0
投票

一种方法是使用子查询,像这样:

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"),
)
© www.soinside.com 2019 - 2024. All rights reserved.