一尘不染

ActiveRecord查找-跳过记录或获取每N条记录

sql

我想做一个查询,从中选择一堆数据,但是我希望能够通过仅选择每三个记录,甚至每个百分之一的记录来降低数据的分辨率。任何。

有什么简单的方法可以用ActiveRecord做到这一点吗?


阅读 124

收藏
2021-05-05

共1个答案

一尘不染

在Oracle中,我将其编写如下:

YourModel.find(:conditions => 'MOD(ROWNUM,3) = 0')

这样做的好处是,过滤器发生在数据库中,因此不会检索所有内容。

在PostgreSQL中,这称为ROW_NUMBER(实际上是SQL标准)。在MySQL中,不支持此功能。

在mysql中,您可以使用来模仿rownum SELECT @rownum:=@rownum+1 rownum, t.* FROM (SELECT @rownum:=0) r, mytable t;。所以我猜像

Bar.find_by_sql("select * from (SELECT @rownum:=@rownum+1 rownum, t.* FROM (SELECT @rownum:=0) r, mytable t) where mod(rownum,3) = 0")

应该管用。

2021-05-05