У меня есть конечная точка API, которая принимает различные аргументы для фильтрации по определенным столбцам. По этой причине я пытаюсь создать запрос, в который легко добавить произвольные фильтры к базовому запросу. По какой-то причине, если я использую:
SELECT "MY_VIEW".*
FROM "MY_VIEW"
-- Distinct on ID filter
WHERE ID IN (SELECT Max(ID)
FROM "MY_VIEW"
GROUP BY ID)
-- Other arbitrary filters...
ORDER BY "MY_VIEW"."NAME" DESC
У меня ужасная производительность, поэтому я начал использовать этот запрос:
SELECT * FROM "MY_VIEW"
-- Distinct on ID filter
LEFT JOIN(
SELECT DISTINCT
FIRST_VALUE("MY_VIEW"."ID")
OVER(PARTITION BY "MY_VIEW"."UNIQUE_ID") as DISTINCT_ID
FROM "MY_VIEW"
) d ON d.DISTINCT_ID = "MY_VIEW"."ID"
-- Other arbitrary filters...
ORDER BY "MY_VIEW"."NAME" DESC
)
Однако, когда я оставляю соединение, он отбрасывает отчетливый фильтр.
Также я не могу использовать rowid, потому что это представление.
Представление является версионной таблицей.
Информация об индексе
УНИКАЛЬНОСТЬ | СТАТУС | INDEX_TYPE | ВРЕМЕННЫЙ | PARTITIONED | JOIN_INDEX | ОПОРЫ
NONUNIQUE | ДЕЙСТВИТЕЛЬНЫЙ | НОРМАЛЬНЫЙ | N | НЕТ | НЕТ | ID
УНИКАЛЬНЫЙ | ДЕЙСТВИТЕЛЬНЫЙ | НОРМАЛЬНЫЙ | N | НЕТ | НЕТ | UNIQUE_ID
НЕУНИКАЛЬНЫЙ | ДЕЙСТВИТЕЛЬНЫЙ | ДОМЕН | N | НЕТ | НЕТ | ИМЯ