Django 对窗口函数进行过滤

2023-11-27

我在 Django 中有两个模型,A and B.

Each A有几个Bs 分配给它,并且Bs 是有序的,这是通过字段完成的B.order_index对于任何从零开始向上计数A.

我想编写一个查询来检查是否有A其中一些Bs 有间隙或有重复order_index values.

在 SQL 中,可以这样完成:

SELECT order_index, RANK() OVER(PARTITION BY a_id ORDER BY order_index ASC) - 1 AS rnk
WHERE rnk = order_index'

但是,当我在 Django 中使用以下代码尝试此操作时:

B.objects.annotate(rank=RawSQL("RANK() OVER(PARTITION BY a_id ORDER BY order_index ASC) - 1", [])).filter(rank=F('order_index'))

我收到一条错误消息:

django.db.utils.ProgrammingError: window functions are not allowed in WHERE
LINE 1: ...- 1) AS "rank" FROM "main_b" WHERE (RANK() OVE...

在 SQL 中,通过将整个内容包装在子查询中并将Where子句应用于该子查询,可以很容易地解决这个问题。我怎样才能在 Django 中做同样的事情?


表达此类查询的一种可能的解决方法是使用https://github.com/dimagi/django-cte.

from django_cte import With

cte = With(
    B.objects.all().annotate(
        rank=Window(
            expression=Rank(),
            partition_by=F('a_id'),
            order_by=F('order_index').asc()
        )
    )
)

cte.join(B.objects.all(), id=cte.col.id).with_cte(cte).annotate(
    rank=cte.col.rank
).filter(
    rank=F('order_index')
)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django 对窗口函数进行过滤 的相关文章

随机推荐

  • 对列中的每个单元格应用函数并将结果添加到新列

    我有一个 data table 如下所示 我想要的是将一个函数应用于 C 列中的每个元素 该函数将接受一个向量 因为 Col C 包含向量元素 并返回另一个向量 应将所得向量添加到新列中 A B C 1 16 151 c 2579 2659
  • Yii框架登录后重定向页面

    我是 Yii 框架的新手 在 Yii 中 当您默认登录时 它会重定向到索引页面 我希望当我登录 Yii 时 页面将重定向到另一个页面而不是索引页面 那么任何人都可以帮助我吗 任何帮助或建议将非常感激 edit 当我使用用户模块时 重定向将如
  • 显示与线连接的树视图项目?

    有没有办法让树视图在展 开项目时显示连接项目的线 Thanks 您必须替换 TreeViewItem 控件模板才能实现这一点 看着MSDN 上的这个线程应该有您需要的所有信息
  • XSLT:更改节点内部文本

    我需要转换以下 xml 文档 a b b a
  • pandas散点矩阵显示相关系数

    我试图找到一种方法来显示 pandas 散点矩阵的下三或上三中的相关系数 有人能指出我正确的方向吗 谢谢 一个最小的工作示例 import matplotlib pyplot as plt import pandas as pd impor
  • Foundation 5 顶栏在 Rails 4 中无法一致工作

    我在 Rails 4 应用程序中使用 Foundation 5 当我发送请求时 顶栏菜单工作正常 我可以悬停项目和嵌套项目没有问题 然后 我单击其中一个项目 该项目具有与其关联的 link to 方法 有时它会给出正确的结果 我的菜单仍然可
  • 向量值多元函数中的插值

    在Python中 我试图构建一个在多维 5 参数空间中插入向量值数据的例程 即我有一个函数 它接受多个输入变量并返回多个输出变量 目前 向量的每个元素都有一个调用 数据位于列式文件中 因此我使用以下命令检索它 import numpy x
  • 在 CollectionView 上的滚动需求上加载更多数据

    我正在 collectionView 上实现一项功能 其中用户滚动底部的 collectionView 20 个项目 并从服务器请求另一组数据 另外 20 个项目 我已经实施了以下两种方法 但我想知道哪种方法更好 或者还有其他我不知道的更好
  • Grailsquartz 插件在 Tomcat 中部署时不起作用

    我有一个使用 Grails 开发的 Web 应用程序 我正在尝试实现一个后台进程 使用 Grails 的quartz1 0 RC9 插件每 5 分钟扫描一次数据库中的表 在尝试编写实际逻辑之前 我正在学习如何使用该插件 因为我是石英新手 因
  • 将省略号添加到 WinForms 程序中的路径,无需 Win32 API 调用(重新访问)

    我正在寻找一种在 C 路径中插入省略号的方法 并在 stackoverflow 上找到了答案 没有 Win32 API 调用的 C 路径省略号 使用VS2010和 Net 4 0的RTM版本 我无法让建议的方法起作用 我搜索了 Net并找到
  • BackgroundWorker多线程访问表单

    我出于某种目的使用同时运行的 5 个 BackgroundWorker 对象 并且所有这些对象都必须更改相同的标签 我怎么做 那么如何从多个线程修改表单呢 如果我想更改公共字符串 我该怎么做 将 Control Invoke 与委托一起使用
  • 在层次结构中移动 UIView 时保留位置(就地粘贴)

    在 Xcode 4 IB 中 有没有一种方法可以将一堆子视图从一个超级视图移动到另一个超级视图 而不破坏它们当前的布局 这应该非常简单 但是当我尝试在视图树中复制 粘贴或移动它们时 它们都会移动到一个位置 例如 在添加一个额外的视图来保存表
  • 两个字符串的连接不起作用[重复]

    这个问题在这里已经有答案了 我有以下代码 但它不起作用 CHARACTER 260 xx yy zz xx A yy B zz xx yy 当我在 Visual Studio 中调试代码时 多变的xx包含 A 多变的yy包含 B 多变的zz
  • 无法设置 pandas 数据框的索引 - 获取“KeyError”

    我生成一个看起来像这样的数据框 summaryDF accuracy f1 precision recall 0 0 494 0 722433 0 722433 0 722433 0 0 290 0 826087 0 826087 0 82
  • 一个broadcastReceiver可以捕获多个广播吗?

    我正在尝试创建多个接近警报 但无法让它工作 我认为广播接收器被覆盖 因此只处理最后一个广播 因此 如果我有两个点靠近 只有最后创建意图的点才会生成警报 我读到我应该使用请求代码 但我不知道该怎么做 我设置待处理意图和广播接收器的方法 pri
  • Subclipse 错误 - Subversion 本机库不可用

    每次加载基于 Subversion 的 PHP 项目时 我都会收到以下消息 显然 操作系统是 Mac OSX Mountain Lion 我也按照链接中的说明进行操作 但它仍然完全随机出现 不过 颠覆行动似乎效果不错 从主菜单中选择 窗口
  • 带参数绑定的 ActiveRecord 选择

    我想将子查询与 ActiveRecord 一起使用 如下所示 User select users select sum amount from subscriptions where subscriptions user id user i
  • Flex 图表:仅显示特定系列的数据提示?

    我有一个LineChart包含多个系列 两者LineSeries and PlotSeries 而且我有一个习惯dataTipFunction为图表设置 但是 我只想显示线系列的数据提示 而不是绘图系列 我尝试过返回null来自我的格式函数
  • 使用 Entity Framework 4.0 复合数据库键

    我们公司对大型数据库的重新设计 在数据库上大量使用了复合主键 忘记性能影响 在实体框架 4 0 中使用此数据库时这会造成任何困难吗 数据库结构不太可能改变 我不是在寻找 哲学 辩论 但实际影响是什么 根据杰里米 米勒 复合键通常会使任何类型
  • Django 对窗口函数进行过滤

    我在 Django 中有两个模型 A and B Each A有几个Bs 分配给它 并且Bs 是有序的 这是通过字段完成的B order index对于任何从零开始向上计数A 我想编写一个查询来检查是否有A其中一些Bs 有间隙或有重复ord