考虑这样的表:
| txn_id | 帐户ID
我想做一个查询,让我获得所有交易的所有 txn_ids,其中交易不是 account_id 的最新(最高 txn_id)。
该数据库是 MySQL 5.1,因此这可能意味着围绕子选择的一些限制。
考虑这样的表:
| txn_id | 帐户ID
我想做一个查询,让我获得所有交易的所有 txn_ids,其中交易不是 account_id 的最新(最高 txn_id)。
该数据库是 MySQL 5.1,因此这可能意味着围绕子选择的一些限制。
如果我理解正确
SELECT txn_id
FROM table
WHERE txn_id <> (SELECT MAX(txn_id) FROM table WHERE account_id = 123456)
AND account_id = 123456
鉴于要求:
我想做一个单一的查询,它将为所有交易获取所有交易的所有 txn_id,其中交易不是 account_id 的最新(最高 txn_id)。
似乎一次为您提供单个帐户的交易 ID 的答案缺少查询的重点。
要获取必须保留(或忽略)的事务 ID 列表,我们可以编写:
SELECT MAX(txn_id) AS max_txn_id, account_id
FROM UnnamedTable
GROUP BY account_id;
现在我们需要获取在该列表中未找到的事务 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
尝试这样的事情:
select txn_id, account_id
order by txn_id desc
limit 1,18446744073709551615;
select txn_id from table
where account_id = 123 and
txn_id < (select max(txn_id) from table where account_id = 123)