2015-11-05 1 views
0

я следующая таблица называется lead_statesВыберите строки, совпадающих с ИНЕК, где нет более новых строк, разделяющих конкретного значение столбца Колонки существуют

Он имеет следующие столбцы: id, lead_id, state, note, created_at

state - это строка из перечислимого списка, например new, opened, sold или lost.

Всякий раз, когда свинец меняет состояние, добавляется новая строка состояния.

Я ищу для поиска потенциальных клиентов в определенном состоянии. Текущее состояние свинца - это новейшее lead_state для этого лидерства.

Так что я в основном смотрит в конечном итоге с областью, как:

Lead.in_state('opened') 

Я попытался следующую реализацию этой сферы:

def in_state(state) 
    lead_state_scope = LeadState.where(state: state) 
    Lead.where(id: lead_state_scope.select(:lead_id)) 
end 

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

ответ

0

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

def in_state(state) 
    Lead.where(id: LeadState.where(state:state).group(:lead_id).having('created_at = MAX(created_at)').select(:lead_id)) 
end 
+0

Спасибо, но Postgres задыхается в результате запроса. SELECT "lead_states" "lead_id" FROM "lead_states", где "lead_states" "состояние" = 'открыто' GROUP BY "lead_states" "lead_id" HAVING created_at = MAX (created_at) ActiveRecord :: StatementInvalid:... PG :: GroupingError: ERROR: столбец «lead_states.created_at» должен появиться в предложении GROUP BY или использоваться в агрегированной функции –

+0

. Попробуйте добавить '.select (: lead_id,: created_at)' между предложением where и предложением группы, см., если это решает проблему. – Jaxx

+0

Ага, да, это определенно похоже на специфику Postgres в зависимости от вашей версии https://github.com/rails/rails/issues/1515. Мой ответ может быть полезен для других, но мне нужно подумать о том, что можно сделать для вашей ситуации. – SamJo

Смежные вопросы