Я запрашиваю автобусные остановки из базы данных и хочу, чтобы она возвращала только 1 остановку на автобусную линию/направление. Этот запрос делает именно это:
Stop.select("DISTINCT line_id, direction")
За исключением того, что он не даст мне никакого другого атрибута, кроме этих 2. Я попробовал пару других запросов, чтобы он возвращал id
в дополнение к полям line_id
и direction
(в идеале он вернул бы все столбцы), но безуспешно:
Stop.select("DISTINCT line_id, direction, id")
а также
Stop.select("DISTINCT(line_id || '-' || direction), id")
В обоих случаях запрос теряет отдельное предложение и возвращаются все строки.
Какой-то классный чувак помог мне и предложил использовать подзапрос, чтобы он возвращал все идентификаторы:
Stop.find_by_sql("SELECT DISTINCT a1.line_id, a1.direction, (SELECT a2.id from stops a2 where a2.line_id = a1.line_id AND a2.direction = a1.direction ORDER BY a2.id ASC LIMIT 1) as id FROM stops a1
Затем я могу извлечь все идентификаторы и выполнить второй запрос, чтобы получить полные атрибуты для каждой остановки.
Есть ли способ, чтобы все это было внутри 1 запроса и возвращало все атрибуты?