簡體   English   中英

ActiveRecord紅寶石行與MySQL表中的最大值

[英]activerecord ruby row with max value in mysql table

我需要從MySQL表table1 (如下所示)中選擇所有具有不同'foreign_row_id'值的記錄,並按最大datetime值對它們進行分組。 例如,從下表中,我應該選擇id = 2和id = 3的行。 在此之后,我必須將結果與帶有template_id的表連接起來。 在我的項目中,我僅使用Ruby和ActiveRecord,而不使用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 |
+----+---------------------+----------------+--------------+

這是我的紅寶石代碼:

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

而且它只給我一個記錄,沒有按ID分組和加入: {"1":"2013-05-02T17:36:53+09:00"} 我應該更改我的代碼以獲取所有行嗎?

我分部分解決了這個問題,首先得到一個可以解決問題的SQL語句:

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

然后,我使用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`')

最后,您可以運行該查詢:

Model1.find_by_sql query.to_sql

我添加了一些反勾號,因為我測試過的字段是SQL保留字,我想您可以忽略它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM