Доброго времени суток
2 дня пытаюсь сделать правильным запрос.
Задача заключается в том, чтобы при двойном запросе в таблицу вернуть наибольшее одно значение, но с UNION мне никак не удается это сделать при двойном запросе, возвращает 2 строки, но мне нужна одна строка с наибольшим значением столбца "rate". Задачу усложняет то, что перед тем как сравнить у 2 строк поле "rate" необходимо его умножить у каждой строки на значение n.
Запрос выглядит вот так:
SELECT * FROM (
SELECT rate, type, route_id, weight, volume,
row_number() OVER (PARTITION BY route_id ORDER BY volume) as num
FROM test_rates rs
WHERE
rs.dt_del IS NULL
AND rs.volume >= 300 -- первая выборка
UNION
SELECT rate, type, route_id, weight, volume,
row_number() OVER (PARTITION BY route_id ORDER BY weight) as num
FROM test_rates rs
WHERE
rs.dt_del IS NULL
AND rs.weight >= 50000 -- вторая выборка
) q1
WHERE q1.num = 1 -- возвращаем только 1 строку
Сама таблица из себя представляет следующее (откройте вкладку result):
2 ключевых столбика это "weight" and "volume" для первого и второго запроса соответственно.
Результат первого запроса , вот такой (откройте вкладку result):
Можно на коммерческой основе. Я думаю здесь можно обойтись и без union, но полагаю с ним мы получаем нужные строки и можем работать с ними.