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
Post a Comment