用于 Ruby on Rails / ActiveRecord 的优雅 PostgreSQL Group by

2023-11-26

尝试使用 PostgreSQL 检索按日期分组的 ActiveRecord 对象数组。

更具体地说,我正在尝试翻译以下 MySQL 查询:

@posts = Post.all(:group => "date(date)", 
   :conditions => ["location_id = ? and published = ?", @location.id, true], 
   :order => "created_at DESC")

我知道 PostgreSQL 对 SQL 标准的解释比 MySQL 更严格,因此这种类型的查询不起作用......并且已经阅读了 StackOverflow 和其他地方关于该主题的许多帖子 - 但它们似乎都不是关于这个问题的明确答案

我尝试过使用 group by 和不同子句进行各种查询组合,但没有太多乐趣 - 目前我有一个相当不优雅的 hack,尽管它有效,但当我看到它时,我会脸红。

使用 Rails 和 PostgreSQL 进行此类查询的正确方法是什么? (忽略了这一事实,这肯定应该在 ActiveRecord 级别进行抽象)


您要在此处使用的 PostgreSQL 功能是DISTINCT ON。通过 ActiveRecord 进行此查询有两种基本方法。

第一种方法是只指定:select and :order选项。当您有一个相当简单的查询而没有任何信息时,这非常有用:joins or :include.

Post.all(
  :select => 'DISTINCT ON (date::date) *',
  :order => 'date::date DESC, created_at DESC'
)

如果您有一个更复杂的查询,其中 ActiveRecord 生成自己的查询SELECT子句中,您可以使用子查询来选择目标记录。

Post.all(
  :joins => 'INNER JOIN (SELECT DISTINCT ON (date::date) id FROM posts ORDER BY date::date DESC, created_at DESC) x ON x.id = posts.id'
)

请注意,根据您的数据,这可能比第一种方法慢一些。我只会在需要时使用此方法。请务必使用类似生产的数据进行基准测试。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用于 Ruby on Rails / ActiveRecord 的优雅 PostgreSQL Group by 的相关文章

随机推荐

  • 如何在加载实际内容之前加载小占位符图像

    我有一个关于图像加载样式的问题 如图所示http www e flux com 该网站首先 随机 加载特定图案的图像 然后再继续显示实际图像 我的猜测是 这是在加载整个网站之前就拥有视觉上令人愉悦的内容 我查看了源代码 发现它有一类 laz
  • 如何从 xml 文件中删除 BOM 字符 [重复]

    这个问题在这里已经有答案了 我正在使用 xsl 来控制 xml 文件的输出 但正在添加 BOM 字符 vim file xml set nobomb wq
  • Java 日历的设置值没有给出预期的日期时间

    我有一个小时 分钟 日期和毫秒时间戳 并且正在尝试创建一个表示时间的 Date 对象 时间戳以东部夏令时间提供 在剖析这个问题时 我创建了一些简单的测试代码来查看发生了什么 并观察到以下情况 Date today new Date int
  • 如何将 QMetaMethod 与 QObject::connect 一起使用

    我有两个 QObject 子类实例和一个对象中信号的两个 QMetaMethod 实例以及另一个对象中插槽的两个实例 我想将这个信号和插槽相互连接 我查看了 qobject h 文件 发现 SIGNAL 和 SLOT 宏只是在方法签名的开头
  • 如何在 slick + postgresql 上进行分页选择

    在使用 slick 3 的 postgresql 数据库中 分页的最佳方式是什么 获取所有行并使用 scala 进行分页 似乎效率不高 带限制和偏移量的静态查询 还有其他办法吗 您可以使用take and drop上的方法TableQuer
  • 如何向连续几天的“连续”行中添加运行计数

    谢谢Mike添加创建 插入语句的建议 create table test pid integer not null date date not null primary key pid date insert into test value
  • 时间单元测试的想法和技巧?

    有人做过时间单元测试吗 我什至不确定这样的术语是否已被创造 但重点是测试操作是否在时间限制内执行 我有一些算法 我想测试它们的执行时间是否按预期增加 我想类似的测试可以用于 IO 以及什么不是 有点像 test timeout 之类的 然而
  • 在 WF4 中工作流定义更改后加载持久工作流

    如何解决这个问题 在WF4中 我在 xaml 中创建一个工作流程并启动它的多个实例 我有一个持久性存储 并且所有工作流程都保留在其工作流程一半的书签上 现在我停止应用程序 如果我重新启动应用程序 一切都会恢复 并且很好地完成 但是 如果我想
  • C# 不可空字段:Lateinit?

    我想知道如何使用后期初始化C 中的类字段可为空的引用类型 想象一下下面的类 public class PdfCreator private PdfDoc doc public void Create FileInfo outputFile
  • 在 Swift 中生成随机单词

    我正在尝试探索 Swift 编程语言 我在 Swift API 中搜索 发现了UIReferenceLibraryViewController班级 我发现如果一个单词是真实的还是不真实的 该方法会返回一个布尔值 dictionaryHasD
  • 如何使用 Visual Studio Text Visualizer 实现自定义类型?

    在 Visual Studio 2015 以及某些旧版本 中 调试 C 代码时 可以显示string通过带有放大镜图标的下拉列表显示各种可视化工具 文本 XML HTML JSON 中的变量 这也适用于某些非字符串类型 例如 System
  • 不带引号的 JavaScript 对象文字键的规则?

    在 JavaScript 中 您可以像这样定义一个对象 var d 1 test 我可以设置一个带有负数索引的键 如下所示 d 1 test2 但如果我尝试在文字初始化中使用负数 则会收到错误 var d 1 test 1 test2 Un
  • ClientScript.RegisterStartupScript 不起作用

    我已经搜索过 SO 和 google 但我似乎无法让它工作 该代码位于我的 asp net 应用程序中 取消 按钮的代码隐藏单击事件中 但似乎没有关闭弹出窗口 有任何想法吗 try if btnCancel Text Close Strin
  • bash 使用 zsh 等快捷方式扩展 cd

    是否有可能在 bash 中扩展类似的东西 cd u lo b to cd usr local bin 抱歉 我无法早点发布 我正在工作 并且绑定功能比我最初想象的更容易出现问题 这是我想出的 绑定以下脚本 bin bash HOME bas
  • node.js - 在进程之间共享套接字

    我读到可以在进程之间共享套接字 这在 Node js 中也可行吗 我在 node js 中看到了集群 api 但这不是我要找的 我希望能够在一个进程中接受连接 也许发送和读取一点 并在一段时间后将此套接字传递给另一个完全独立的 node j
  • 如何将Makefile重写为android.mk?

    在我的新项目中 我需要基于一个c编写的项目 我知道我可以使用 NDK 来做到这一点 但这里有一个问题 如何重写标准Makefile进入Android mk 更进一步 在Android中 我可以忽略ndk 直接使用jni构建项目 将c项目适配
  • 如何在 Electron 中访问 的 DOM?

    我刚刚开始使用 Electron 之前有使用过 node webkit nw js 的经验 在 nw js 中 我能够创建 iframe 然后访问所述 iframe 的 DOM 以获取标题 图标等内容 几天前 当我拿起 Electron 将
  • 将本地 .aar 文件添加到我的 gradle 构建中

    所以我创建了一个Android库并成功将其编译成 aar文件 我将这个 aar 文件命名为 projectx sdk 1 0 0 aar 现在我希望我的新项目依赖于这个 aar 所以我所做的是这个帖子 但这篇文章让我感到困惑 因为我没有得到
  • 导入android.support.v7无法解决

    我是安卓新手 目前 我有adt bundle windows x86 20131030 zip Windows 32 位 已安装 并已成功安装 Android SDK 和 Eclipse 另外 我还更新了 Android SDK 管理器中的
  • 用于 Ruby on Rails / ActiveRecord 的优雅 PostgreSQL Group by

    尝试使用 PostgreSQL 检索按日期分组的 ActiveRecord 对象数组 更具体地说 我正在尝试翻译以下 MySQL 查询 posts Post all group gt date date conditions gt loca