Как найти отдельные годы из таблицы с несколькими годами в Rails - PullRequest
3 голосов
/ 04 августа 2011

У меня есть таблица с несколькими сотнями записей, каждая из которых содержит столбец datetime. Как наиболее эффективно найти отличные годы в этом поле даты-времени?

Ответы [ 4 ]

12 голосов
/ 04 августа 2011

Использование Ruby (для этого потребуется загрузка всех записей):

Model.select("my_datetime").map{ |item| item.my_datetime.year }.uniq

Использование SQL (этот пример для PostgreSQL, я могу обновить его с вашей конкретной базой данных):

# PostgreSQL
Model.select("distinct(extract(year from my_datetime))")

# MySQL
Model.select("distinct(year(my_datetime))")

# SQLite
Model.select("strftime('%Y', my_datetime)")
1 голос
/ 09 ноября 2015

Это вернет уникальные годы в массиве:

years = Model.pluck(:created_at).map{|x| x.year}.uniq

1 голос
/ 04 августа 2011
SELECT DISTINCT(YEAR(created_at)) FROM your_table

, вероятно, будет работать, но сильно зависит от используемой базы данных (это, конечно, будет работать с MySQL).

ActiveRecord - неприятность, если вы хотите использовать пользовательские операторы SQLиспользование операторов Ruby, таких как

Model.all.map(&:created_at).map(&:year).uniq

, действительно очень полезно, хотя может быть очень медленным из-за загрузки и перебора всех ваших записей.

0 голосов
/ 21 июня 2016

Это вернет массив лет непосредственно из базы данных в PostgreSQL:

YourModel.pluck("DISTINCT EXTRACT(YEAR FROM my_datetime)::Integer")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...