Мы можем использовать ABS
вместе с ROW_NUMBER
здесь:
WITH cte AS (
SELECT t1.Key, t1.Val, t2.Val AS closestVal,
ROW_NUMBER() OVER (PARTITION BY t1.Key ORDER BY ABS(t1.Val - t2.Val)) rn
FROM yourTable t1
INNER JOIN yourTable t2
ON t1.Key <> t2.Key
)
SELECT Key, Val, closestVal
FROM cte
WHERE rn = 1;
Демо
Примечание. Приведенная выше демонстрация предназначена для SQL Server, а не для Teradata.Если KEY
является зарезервированным ключевым словом в Teradata, вам придется его избегать, если вы планируете использовать его в качестве имени столбца.