Учитывая требование:
Я бы хотел сделать один запрос, чтобы получить все txn_ids для всех транзакций, где транзакция не самая последняя (самая высокая txn_id) для account_id.
кажется, что ответы, которые дают вам идентификаторы транзакций для одной учетной записи за раз, упускают точку запроса.
Чтобы получить список идентификаторов транзакций, которые должны быть сохранены (или проигнорированы), мы можем написать:
SELECT MAX(txn_id) AS max_txn_id, account_id
FROM UnnamedTable
GROUP BY account_id;
Теперь нам нужно получить список идентификаторов транзакций, не найденных в этом списке. Это не совсем просто:
SELECT txn_id, account_id
FROM UnnamedTable
WHERE txn_id NOT IN
(SELECT max_txn_id
FROM (SELECT MAX(txn_id) AS max_txn_id, account_id
FROM UnnamedTable
GROUP BY account_id
)
)
В любом случае, это нормально работает с IBM Informix Dynamic Server 11.50 и таблицей и данными ниже:
create table unnamedtable(txn_id integer not null, account_id integer not null);
insert into unnamedtable values(1, 12);
insert into unnamedtable values(2, 12);
insert into unnamedtable values(3, 12);
insert into unnamedtable values(4, 13);
дает результаты:
1 12
2 12