У нас есть база данных карт лояльности в моей компании. Система карт обслуживается двумя типами терминалов по всей стране. Проблема в том, что два терминала по-разному подсчитывают баланс текущей точки.
Я хочу сделать запрос, который сначала находит последнюю строку списка транзакций одного пользователя по дате, затем проверяет идентификатор терминала и на основе идентификатора возвращает баланс карты из той же строки.
Два типа терминалов можно выразить так:
terminal_id LIKE 'AGHUPR9%'
terminal_id LIKE 'AGHUPR7%'
AGHUPR9% получают баланс просто из столбца card_balance .
AGHUPR7% из них необходимо sum card_balance и total_points , чтобы получить текущий баланс.
Я написал основные части запроса, но я недостаточно знаком с ORACLE, поэтому не знаю, как их объединить синтаксически. Это то, что я буду признателен за вашу помощь. Ниже приводится то, что я придумал, с комментариями, в которых я не уверен насчет необходимого кода.
SELECT *
FROM
(SELECT terminal_id
FROM ag_tranzakcio
WHERE cardnumber = '9348722610095185'
ORDER BY tran_date DESC)
WHERE ROWNUM = 1
В случае вышеприведенный оператор возвращает терминал_ид, начиная с AGHUPR9, сделать это :
SELECT *
FROM
(SELECT card_balance
FROM ag_tranzakcio
WHERE cardnumber = '9348722610095185'
ORDER BY tran_date DESC)
WHERE ROWNUM = 1
В случае первый оператор возвращает терминал_ид, начинающийся с AGHUPR7, вместо этого делают :
SELECT *
FROM
(SELECT card_balance+total_points
FROM ag_tranzakcio
WHERE cardnumber = '9348722610095185'
ORDER BY tran_date DESC)
WHERE ROWNUM = 1
Как мне объединить их в рабочий запрос? Я пытаюсь использовать CASE без особого успеха.
Заранее спасибо.