Если возможными значениями данных являются строчные буквы a-z или цифры, вы можете также захватить первые 3 символа, используя группу захвата и класс символов [a-z0-9]
, и после этого поставить точку с запятой. Если может быть более 1 символа, вы можете использовать квантификатор +
для класса символов, например [a-z0-9]+
, а затем заменить его на первую группу захвата.
Найдите, что
^([a-z0-9];[a-z0-9]);
Заменить на
$1
Или с помощью \K
вы можете найти ^[a-z0-9];[a-z0-9]\K;
и оставить «Заменить на пустое».
Table.minimum(:price, :group => :type)
См. http://api.rubyonrails.org/classes/ActiveRecord/Calculations.html#method-i-minimum для больше.
Можно использовать #find_by_sql
, но это подразумевает возврат объекта модели, который не мог бы быть тем, что Вы хотите.
Если Вы хотите перейти пустые к металлу, можно также использовать #select_values
:
data = ActiveRecord::Base.connection.select_values("
SELECT f.type, f.variety, f.price
FROM (SELECT type, MIN(price) AS minprice FROM table GROUP BY type ) AS x
INNER JOIN table AS f ON f.type = x.type AND f.price = x.minprice")
puts data.inspect
[["type", "variety", 0.00]]
ActiveRecord является просто инструментом. Вы используете его, когда это удобно. Когда SQL делает лучшее задание, Вы используете это.