Пользуется DISTINCT ON
Foo.where(created_at: from..to)
.select("DISTINCT ON (foo) foo, bar")
.order("foo, bar")
Вот пример, чтобы показать, как этот запрос дает уникальные записи по нескольким столбцам. Позволяет создать таблицу:
app_development=# select * from clients;
id | age | name | created_at | updated_at
----+-----+------+----------------------------+----------------------------
1 | 26 | Arup | 2015-03-23 08:56:45.968966 | 2015-03-23 08:56:45.968966
2 | 26 | Arup | 2015-03-23 08:56:57.269637 | 2015-03-23 08:56:57.269637
3 | 25 | Ayan | 2015-03-23 08:57:06.956179 | 2015-03-23 08:57:06.956179
(3 rows)
appdevelopment=# SELECT DISTINCT ON (name) name, age FROM "clients" ORDER BY name, age;
name | age
------+-----
Arup | 26
Ayan | 25
(2 rows)
Точно такой же вы можете сделать в Rails тоже:
2.1.2 :005 > Client.select("DISTINCT ON (name) name, age").order("name, age")
Client Load (0.9ms) SELECT DISTINCT ON (name) name, age FROM "clients" ORDER BY name, age
=> #<ActiveRecord::Relation [#<Client id: nil, age: 26, name: "Arup">, #<Client id: nil, age: 25, name: "Ayan">]>
2.1.2 :006 > Client.select("DISTINCT ON (name) name, age").order("name, age").map { |r| [r.name, r.age] }
Client Load (0.5ms) SELECT DISTINCT ON (name) name, age FROM "clients" ORDER BY name, age
=> [["Arup", 26], ["Ayan", 25]]
Почему вы не попробовать несколько цепочек 'uniq' вызовов методов? – hattenn
Ну .. я получил downvote, так как я не понимаю ваш пример кода .. :) Не могли бы вы рассказать об этом более конкретно .. так что я тоже могу вам помочь ..: D –
Вы хотите найти записи, которые уникальны в вашей базы данных или вы хотите удалить дубликаты? – Fer