sql >> Base de Datos >  >> RDS >> PostgreSQL

Elegante grupo PostgreSQL para Ruby on Rails / ActiveRecord

La característica de PostgreSQL que desea usar aquí es DISTINCT ON . Hay dos formas básicas de realizar esta consulta a través de ActiveRecord.

El primer método es simplemente especificar el :select y :order opciones Esto funciona muy bien cuando tiene una consulta bastante simple sin :joins o :include .

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

Si tiene una consulta más compleja donde ActiveRecord genera su propio SELECT cláusula, puede utilizar una subconsulta para seleccionar los registros de destino.

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'
)

Tenga en cuenta que esto podría ser un poco más lento que el primer método dependiendo de sus datos. Solo usaría este método si es necesario. Asegúrese de comparar con datos de producción.