Я пытаюсь выяснить, как построить запрос, который будет возвращать только 2 из записей транзакций из стека 1 во многие записи транзакций, сгруппированные под одним серийным номером. 2 записи, которые мне нужны;
1) самая последняя транзакция в стеке, которая имеет статус «ОШИБКА» и 2) следующая самая последняя транзакция в этом стеке, которая имеет статус «УСПЕХ».
Так чтоПример набора записей может выглядеть следующим образом ...
1) SERIAL_NUMBER TRXN_ID STATUS
------------- --------- --------
1 08LKL47T8ZF6 16379796 Success
2 08LKL47T8ZF6 16380200 Error
3 08LKL47T8ZF6 16381077 Retired
4 08LKL47T8ZF6 16581500 Success
5 08LKL47T8ZF6 16581833 Success
6 08LKL47T8ZF6 16382800 Retired
7 08LKL47T8ZF6 16583505 Error
8 08LKL47T8ZF6 16586413 Error
Пока у меня есть следующее ... но это вернет все 8 записей, перечисленных выше ...
SELECT
STG.src_serial_number
,STG.trxn_id
,STG.interface_status
FROM
staging_table STG
-- All SN's where the most recent(max) transaction was an ERROR.
,( SELECT X.src_serial_number
FROM staging_table X
,( SELECT MAXNUM.src_serial_number, max(MAXNUM.trxn_id) as trxn_id
FROM staging_table MAXNUM
WHERE MAXNUM.src_serial_number = src_serial_number
GROUP BY MAXNUM.src_serial_number ) Y
WHERE X.src_serial_number = Y.src_serial_number
AND X.trxn_id = Y.trxn_id
AND X.interface_status = 'Error'
) ERROR_REC
-- No prior TRXN_ID / trxn for this Serial Number stack is a SUCCESS.
,( SELECT PRIORSUCCESS.src_serial_number
FROM staging_table PRIORSUCCESS
WHERE PRIORSUCCESS.interface_status = 'Success'
AND PRIORSUCCESS.src_serial_number = src_serial_number
) SUCCESS_REC
WHERE STG.src_serial_number = ERROR_REC.src_serial_number
AND STG.src_serial_number = SUCCESS_REC.src_serial_number
AND ERROR_REC.src_serial_number = SUCCESS_REC.src_serial_number
ORDER BY STG.src_serial_number asc, STG.trxn_id asc
Ожидаемые результаты будут заключаться в создании запроса, который будет возвращать только записи № 8 (последняя ошибка) и № 5 (последний успех)
SERIAL_NUMBER TRXN_ID STATUS
------------- --------- --------
5 08LKL47T8ZF6 16581833 Success
8 08LKL47T8ZF6 16586413 Error