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'

未经允许不得转载:芯片验证自学网-IC设计入门自学网站 » Django ORM:带后续过滤的窗口函数

赞 (0) 打赏

觉得文章有用就打赏一下文章作者

微信扫一扫打赏