PostgreSQL查询以获取彼此在几微秒内发生的事件

时间:2014-05-05 14:29:41

标签: sql ruby-on-rails postgresql

Ruby on Rails' ActiveRecord的destroy_all方法为每条记录生成一个SQL DELETE查询。我们在Web应用程序中有一个页面,允许用户删除相关记录。由于deleted_at时间戳关闭了几微秒,因此对同时删除的所有记录进行分组变得具有挑战性。以下是一些示例数据:

id | deleted_at
----+---------------------------- 71 | 45 | 2014-04-29 18:35:00.676153 46 | 2014-04-29 18:35:00.685657 47 | 2014-04-30 21:11:00.73096 48 | 2014-04-30 21:11:00.738533 49 | 2014-04-30 21:11:00.745232 50 | 51 | (8 rows)

所以你可以看到这里有两个事件,一个影响2行(ids 45和46),一个影响3行(ids 47,48和49)。我的问题是如何查询此表,以便将每个事件分组为一行?我考虑过使用extract(microseconds from r.deleted_at)但如果秒被包裹则会失败。我想要一个查询,甚至是一个比较每条记录的功能,并将deleted_at之间的记录分组到一个特定的阈值内。

编辑:我应该提一下,我不能使用delete_all,因为我希望运行回调。我们使用paranoia gem来软删除记录。

1 个答案:

答案 0 :(得分:1)

我找到了解决方法。我可以使用update_all手动设置时间戳,而不是依赖ActiveRecord回调。所以我不是Model.where(...).delete_all Model.where(...).update_all(deleted_at: Time.current)而是{{1}}。现在我可以按时间戳轻松分组。

如果有人想回答原始的PostgreSQL查询问题,我很乐意为点选择正确答案。