PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Geben Sie jede n-te Zeile aus der Datenbank mit ActiveRecord in Rails zurück

Ich glaube, Sie suchen nach einer Abfrage wie dieser:

SELECT * FROM (SELECT widgetstats.*, row_number() OVER () AS rownum FROM widgetstats ORDER BY id) stats WHERE mod(rownum,3) = 0

Dies ist mit ActiveRecord schwierig zu erstellen, sodass Sie möglicherweise gezwungen sind, Folgendes zu tun:

@widgetstats = self.widgetstats.find_by_sql(
  %{
    SELECT * FROM
    (
      SELECT widgetstats.*, row_number() OVER () AS rownum FROM widgetstats ORDER BY id
    ) AS stats
    WHERE mod(rownum,3) = 0
  }
)

Natürlich möchten Sie die verwendete Reihenfolge ändern und WHERE-Klauseln oder andere Modifikationen hinzufügen, die Ihren Anforderungen entsprechen.