django - Django窗口函数FirstValue产生无效的SQL
问题描述
我正在尝试使用窗口函数来获取每个组中的第一个并生成下面的 sql 查询 - 我使用了 sql 并在控制台中使用它,似乎 CAST() 函数导致了这个问题。有没有办法在查询中摆脱这个?
Django 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()
生成在 SQLite3 数据库上运行的此 SQL:
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)
删除 cast 函数会产生结果集有关。
解决方案
推荐阅读
- python - 训练/验证/测试分割时间 LSTM
- chromium - 使用 Puppeteer 在新页面上运行 JS
- postgresql - Postgresql insert 的表达式比 target 多
- c++ - SDL2 - SDL_PollEvent 在 Ubuntu/Mac OS X 上比 Windows 慢
- reactjs - 如何在 React.js 中访问另一个组件中一个组件的状态变量或 let、const、var 变量?
- mysql - 运行 MySQL >8.0 sqlMessage 时出现问题:“'客户端不支持服务器请求的身份验证协议;考虑升级 MySQL 客户端'”
- ansible - Ansible:捕获失败消息并将其用于块的恢复部分
- python - 如何在我的计算器中实现退格键和键盘功能键?
- python - Python 正确地将复杂对象解析为 JSON 格式
- adobe-indesign - 如何在 InCopy 中保存标签?