Оконная функция Django FirstValue Создание неверного SQL - PullRequest
0 голосов
/ 23 мая 2019

Я пытаюсь использовать оконную функцию для получения первой из каждой группы, и она производит запрос 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), поскольку удаление функции приведения приводит к набору результатов.

...