Регулярное выражение, которое проверяет все сценарии

Postgres

В Postgres это может быть достигнуто с помощью следующего запроса.

SELECT DISTINCT ON ("group") * FROM projects
ORDER BY "group", date DESC, id DESC

Поскольку столбец date может быть не уникальным здесь, я добавил дополнительный ORDER BY на id DESC, чтобы разорвать связь в пользу записи с более высоким идентификатором, в случае, если две записи в группе имеют одинаковую дату. Вместо этого вы можете использовать другой столбец, например, дату / время последнего обновления или так, что зависит от вашего варианта использования.

При переходе к ActiveRecord, к сожалению, нет API для DISTINCT ON, но мы можем по-прежнему использовать простой SQL с select:

Project.select('DISTINCT ON ("group") *').order(:group, date: :desc, id: :desc)

или если вы предпочитаете использовать AREL вместо наличия необработанного SQL:

p = Project.arel_table
Project.find_by_sql(
  p.project(p[Arel.star])
   .distinct_on(p[:group])
   .order(p[:group], p[:date].desc, p[:id].desc)
)

MySQL

Для другие базы данных, такие как MySQL, к сожалению, не так удобны. Существует множество доступных решений, см., Например, этот ответ .

0
задан Adam Macierzyński 5 March 2019 в 17:42
поделиться

1 ответ

В конце этого комментария есть непревзойденные круглые скобки, но в остальном это просто отрицательный прогноз (поэтому он не начинается с «!»), За которым следует любое количество символов в классе символов. Они включают в себя «A» и «#», поэтому любые последовательности этих символов будут приняты. Я не знаю, что вы действительно хотите сопоставить, но это объяснение, почему A # A # A # делает.

0
ответ дан Peter Westlake 5 March 2019 в 17:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: