ответ зависит от того, что вы определяете по первому значению. ;) - Но давайте попробуем:
SELECT ID, SELECTED_VALUE
FROM DATABASE.TABLE AS DATA2
LEFT JOIN (
SELECT ID, VALUE, VALUE_SEARCH
FROM DATABASE2.TABLE2
WHERE VALUE = 1
QUALIFY ROW_NUMBER() OVER (PARTITION by ID, VALUE ORDER BY VALUE_SEARCH DESC) = 1
) AS DATA2
ON DATA.ID = DATA2.ID
WHERE SELECTED_VALUE >= VALUE_SEARCH;
Вы можете определить свое определение первого значения в определении ROW_NUMBER.
И последнее: если вы не определили PrimaryIndex (DistrubutionKey), Teradata всегда занимает первую строку. Это может привести к нежелательному PI и, следовательно, к сильно перекосившейся таблице. Поэтому я рекомендую всегда добавлять определение первичного ключа, даже когда говорится «НЕТ ПЕРВИЧНОГО ИНДЕКСА» ...
PS: я вижу необходимость в SubQuery из-за ожидаемого плана выполнения. Сначала нет смысла объединять две большие таблицы и фильтровать их. Для Spool и RDBMS удобнее, если вы объединяете таблицу с (предварительно отфильтрованной) меньшей вложенной таблицей.