activerecord ruby row with max value in mysql table -


i need select mysql table table1 (it's shown below) records different 'foreign_row_id' values , group them maximum datetime value. example, table below should select rows id=2 , id=3. , after have join result table phrase_id's. in project use ruby , activerecord without rails.

+----+---------------------+----------------+--------------+ | id | datetime            | foreign_row_id | other_fields | +----+---------------------+----------------+--------------+ |  1 | 2013-05-02 17:36:15 |              1 |            1 | |  2 | 2013-05-02 17:36:53 |              1 |            1 | |  3 | 2013-05-03 00:00:00 |              2 |            3 | +----+---------------------+----------------+--------------+ 

here ruby code:

@result=  model1.joins(:foreign_row).                  where(:user_id => user_id).                  order(:datetime).                  reverse_order.                  select('table1.*, foreign_row.*').                  maximum(:datetime, :group => :foreign_row_id). 

and gives me 1 record, without grouping id , joining: {"1":"2013-05-02t17:36:53+09:00"}. should change in code rows?

i solved parts, first sql sentence solve problem:

select * (select * `models`  order `datetime` desc) m  group `foreign_row_id` 

and built query arel:

model_table = model1.arel_table subquery = model_table.project(arel.sql('*')).order('`datetime` desc').as('m') query = model_table.project(arel.sql('*')).from(subquery).group('`foreign_row_id`') 

finally can run query:

model1.find_by_sql query.to_sql 

i added ticks because fields tested sql reserved words, think can omit them.


Comments