Я пытаюсь использовать оконную функцию для получения первой из каждой группы, и она производит запрос sql ниже - я взял sql и поиграл с ним в консоли, и кажется, что функция CAST () вызывает проблема. Есть ли способ избавиться от этого в запросе?
Джанго 2,1 Код:
def contract_list(user):
price_window = Window(
expression=FirstValue('settle_price'),
partition_by=F('contract'),
order_by=F('trade_time').desc()
)
market_prices = Trade.objects.filter(
contract__isnull=False
).annotate(
market_price=price_window
).values(
con=F('contract'),
market_price=F('market_price'),
).order_by(
'contract'
).all()
создает этот прогон SQL для базы данных SQLite3:
SELECT
CAST(FIRST_VALUE("trading_trade"."settle_price") AS NUMERIC) OVER PARTITION BY "trading_trade"."contract_id" ORDER BY "trading_trade"."trade_time" DESC) AS "market_price",
"trading_trade"."contract_id" AS "con"
FROM
"trading_trade"
WHERE
"trading_trade"."contract_id" IS NOT NULL
ORDER BY
"trading_trade"."contract_id" ASC
Опять же, проблема, похоже, связана с CAST(FIRST_VALUE("trading_trade"."settle_price") AS NUMERIC)
, поскольку удаление функции приведения приводит к набору результатов.