У меня есть следующая таблица: (обратите внимание, что цель уникальна только для иллюстрации)
a | b | TSD | target
---|----|-------|-------
a1 | b1 | 1 | 1
a2 | b1 | 1 | 2
a1 | b2 | 1 | 3
a2 | b2 | 1 | 4
a1 | b1 | 2 | 5
a2 | b1 | 2 | 6
a1 | b2 | 2 | 7
a2 | b2 | 2 | 8
Теперь у меня есть выбор как
SELECT target FROM tab
WHERE a = :val-A
AND b = :val-B
AND TSD <= :val-TSD
ORDER BY TSD desc
FETCH FIRST 1 ROW ONLY;
Так что для входов a1
b1
1
Я получаю 1
, для a1
b2
42
Я получаю 7
Теперь я хотел бы изменить этот запрос, чтобы я мог предоставить несколько таких входных данных для одновременного запроса - (если это возможно) (порядок записей не имеет значения, мне просто нужен новейший запись.)
Я бы нацелился примерно так:
SELECT a, b, target FROM tab
WHERE (a, b) in (
(:val-a1, :val-b1)
,(:val-a2, :val-b2)
-- ...
,(:val-an, :val-bn)
)
AND TSD <= :val-TSD -- How to do the < per input?
FETCH FIRST 2 ROWS ONLY; -- How to only get the newest one per input?
Я хочу объединить 50 из этих вызовов в один оператор SELECT
.
UNION
все 50 строк вместе не вариант.
(это будет внутри программы COBOL с DB2)