Эффективная сортировка рядов многочисленными колонками в Рельсах 3

У меня есть имя таблицы сделки со следующими колонками

created_at        | debit | credit | balance | account_id
2012-2-2 02:22:22 | 3000  | 0      | 0       | 8
2012-2-2 07:22:22 | 500   | 1000   | 0       | 8
2012-2-2 09:22:22 | 0     | 8000   | 0       | 8

2012-3-3 19:17:20 | 1000  | 0      | 0       | 8
2012-3-3 04:02:22 | 0     | 8000   | 0       | 8

Прежде, чем вычислить баланс я должен

  • сделки вида по дате (т.е. ежедневно)
  • тогда сортирует дебетом (более высокий дебет должен быть на первом месте)

У меня есть миллион сделок, которые отличает account_id. Что такое эффективный способ сортировать в таком сценарии?

Любой ответ будет цениться.

2
nl ja de
@operand: Да я имею в виду по дате:)
добавлено автор amjad, источник
Попытайтесь группироваться по дате и вид дебетом.
добавлено автор MurifoX, источник
Я могу неправильно понимать что-то, но wouldn' t сортировка ко времени в каждую дату совпасть с сортировкой ко времени? Если вы сортируете ко времени сначала, то какой-либо вторичный вид won' t действительно имеют значение, если двух сделок не произошло точно в то же время. Возможно, вы имеете в виду вид по дате, затем дебетом?
добавлено автор operand, источник

1 ответы

This sounds a lot like this question

Transaction.all(:order => "created_at DESC, debit DESC")

Этот вид сомнения точно, к чему реляционные базы данных способны и с надлежащей индексацией, это должно быть эффективно для вас.

Для конкретного счета …

Transaction.find_by_account_id(some_id, :order => "created_at DESC, debit DESC")

Если это - установка как надлежащая ассоциация ActiveRecord на счете, можно установить порядок там, таким образом, ассоциация всегда возвращается в предпочтительном заказе:

class Account
    has_many :transactions, :order => "created_at DESC, debit DESC"
end

Таким образом, любое время, вы спрашиваете счет на его сделки как Account.find (12345) .transactions , они будут возвращены в предпочтительной сортировке автоматически.

2
добавлено
Я знаю, что этот ответ был опубликован в 2012, но способствовать людям, которым, возможно, понадобится, I' ll отправляют здесь способ сделать это в Рельсах 4.0 +, начиная с : заказ в has_many блок был удержан от использования и должен быть заменен блоком объема лямбды. Можно сделать это, используя мешанину стиль: has_many: сделки,-> {заказ (created_at:: desc, дебет: desc)} , или все еще как последовательность : has_many: сделки,-> {заказ (' created_at DESC, дебетовый DESC')}
добавлено автор developer033, источник
pro.ruby
pro.ruby
1 181 участник(ов)

Язык программирования Ruby Additional docs: https://rubyreferences.github.io/rubyref/ Invite: https://telegram.me/joinchat/Be4rsT2NuB3CyJaF26j1kA Кто хочет компилировать: @crystal_ru (его синтаксис основан на Ruby) Участник @proDOT

Ruby, Rails, Hanami | dry-rb
Ruby, Rails, Hanami | dry-rb
1 180 участник(ов)

https://telegram.me/rubyjob - Ruby Job По вопросам - @eugene_shved

Ruby School .us
Ruby School .us
1 045 участник(ов)

Чат-болталка для учеников руби-школы и не только. Правила: https://telegra.ph/Pravila-chata-Rubi-shkoly-03-13

Random Ruby Chat
Random Ruby Chat
589 участник(ов)

Правила публикации вакансий: https://t.me/codenamecrud/60865

Rubyata
Rubyata
333 участник(ов)

Коммюнити Ruby и Ruby On Rails Флуд не приветствуются. Вакансии можно публиковать только и ТОЛЬКО по пятницам с хештегом #вакансия.

Ruby Talks
Ruby Talks
236 участник(ов)

Национальная Флеймотека

RubyRush
RubyRush
189 участник(ов)

rubyrush.ru программирование для самых новичков

Rails Chat
Rails Chat
87 участник(ов)

You are welcome to discuss Ruby On Rails development process and other stuff