Django ORM:带后续过滤的窗口函数

回答 这个问题, I 发现 窗口函数不允许与过滤器结合(技术上是允许的,但过滤器子句会影响窗口)。有一个提示,就是要把window函数包在一个内部查询中,所以最后的SQL是这样的(据我了解)。

SELECT * FROM (
    SELECT *, *window_function* FROM TABLE)
WHERE *filtering_conditions*

问题是:如何用Django ORM写这个查询?

解决方案:

另一种解决方案是通用表表达式(CTE),借助于 django-cte,你可以实现你想要的东西。

cte = With(
    YouModel.objects.annotate(
        your_window_function=Window(...),
    )
)

qs = cte.queryset().with_cte(cte).filter(your_window_function='something')

大致意思是:

WITH cte as (
    SELECT *, WINDOW(...) as your_window_function
    FROM yourmodel
) 
SELECT * 
FROM cte
WHERE cte.your_window_function = 'something'

给TA打赏
共{{data.count}}人
人已打赏
解决方案

PropertiesLoaderUtils.loadProperties如何在运行时使用Spring映射到配置POJO?

2022-4-20 2:00:09

解决方案

DB2 INSERT INTO SELECT状态将行复制到同一张表中,不允许多行。

2022-4-20 2:00:11

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索