Подход 1 - Общие мин. По идентификатору:
Вы выражаете столбец tp.id
в своем запросе, поэтому ваш выбор будет запускать MIN()
для каждой группы id
. Если вам нужен глобальный MIN()
для вашего запроса, просто сделайте так:
SELECT MIN((3600 * (tp."meta"->>'distance')::numeric) / ((tp."meta"->>'runTime')::NUMERIC)) minkph
FROM "Trip" tp
WHERE tp."createdAt" BETWEEN '2020-04-01 00:00:00+00'
AND '2020-04-30 00:00:00+00'
Каждая групповая функция группирует набор различных данных, если вы не передаете ни одного столбца, кроме MIN()
, запрос приведет глобальный результат в одну строку для всех строк.
Подход 2 - Общий мин.:
Если вы хотите получить MIN()
и соответственно id
, вы можете сделать следующее и сделать LIMIT 1
. как есть:
SELECT tp."id" AS tripid, ((3600 * (tp."meta"->>'distance')::numeric) / ((tp."meta"->>'runTime')::NUMERIC)) minkph
FROM "Trip" tp
WHERE tp."createdAt" BETWEEN '2020-04-01 00:00:00+00'
AND '2020-04-30 00:00:00+00'
ORDER BY 2
LIMIT 1
во времени. Вы можете использовать оконные функции, но это немного сложно сделать.