简体   繁体   中英

activerecord ruby row with max value in mysql table

I need to select from MySQL table table1 (it's shown below) all records with different 'foreign_row_id' values and group them by maximum datetime value. For example, from the table below I should select rows with id=2 and id=3. And after this I have to join the result with table with phrase_id's. In my project I use only Ruby and 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 my 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 it gives me only one record, without grouping by id and joining: {"1":"2013-05-02T17:36:53+09:00"} . What should I change in the my code to get all rows?

I solved this by parts, first I get a SQL sentence that would solve problem:

SELECT * FROM (SELECT * FROM `models`  ORDER BY `datetime` desc) m  GROUP BY `foreign_row_id`

And then I built that query with 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 you can run that query:

Model1.find_by_sql query.to_sql

I added some back ticks because fields I tested with were SQL reserved words, I think you can omit them.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM