ruby-on-rails - ActiveRecord 为每个日期选择前 10 个项目,持续 30 天
问题描述
模型是 Posts,每个帖子都有 upvotes:integer。每天都会创建数百个帖子,我想通过一个查询返回过去 30 天中每天投票最多的 10 个帖子。(300 个结果)
按时间顺序排列
我想返回过去 30 天的结果,并在同一查询中显示每天前 10 个帖子。
预期的结果应该是:
今天的前 10 个帖子,昨天的前 10 个帖子...... 30 天前的前 10 个帖子。
有什么方法可以在不每天进行循环和单独查询的情况下进行此查询?
解决方案
- 原始 SQL 如下所示:
SELECT (array_agg('id => ' || id || ', ' || 'body => ' || body || ', ' || 'upvotes => ' || upvotes order by upvotes desc))[1:10] AS posts, date FROM posts GROUP BY date;
它返回具有 2 个值的哈希,第一个是具有帖子数组的关键帖子,第二个值是日期
sql = "select (array_agg('id => ' || id || ', ' || 'body => ' || body || ', ' || 'upvotes => ' || upvotes order by upvotes desc))[1:
10] as posts, date from posts group by date;"
records = ActiveRecord::Base.connection.execute(sql)
records[0] = {"posts"=> "{\"id => 8, body => atis atis animatis, upvotes => 9\",\"id => 11, body => Fuga enim sit aliquam., upvotes => 8\",\"id => 20, body => Vel vero fugiat explicabo., upvotes => 8\",\"id => 18, body => Nesciunt dolor voluptatibus ad., upvotes => 7\",\"id => 17, body => Laboriosam qui nam esse., upvotes => 6\",\"id => 13, body => Earum est temporibus odio., upvotes => 6\",\"id => 16, body => Autem qui nam omnis., upvotes => 4\",\"id => 7, body => Facilis aut non aut., upvotes => 4\",\"id => 15, body => Voluptatem non asperiores vero., upvotes => 4\",\"id => 12, body => Nihil facere aut natus., upvotes => 3\"}",
"date"=>2019-11-24 14:41:34 UTC}
然后你可以解析结果。希望能帮助到你
推荐阅读
- google-apps-script - 有没有办法从谷歌表中搜索和提取应用程序脚本
- python - 如何在顶层窗口的 tkinter 上添加图片背景?
- stm32 - 如何确定运行时以太网电缆是否已拔出
- python - 迭代大型 npz 文件的有效方法
- e2e-testing - 监视文件更改并无头运行
- amazon-web-services - DynamoDB 获取项目 TypeScript 地狱
- .net - docker-compose up 失败:当前的 .NET SDK 不支持针对 .NET Core 2.2
- java - 从 pdfcompare 结果接收文件
- python - zeep Client() 调用返回错误:在 xsd:import 上定义的命名空间与位于以下位置的导入 targetNamespace 不匹配:
- php - 如何制作一个包含许多 foreach 的嵌套表