0

考虑这样的表:

| txn_id | 帐户ID

我想做一个查询,让我获得所有交易的所有 txn_ids,其中交易不是 account_id 的最新(最高 txn_id)。

该数据库是 MySQL 5.1,因此这可能意味着围绕子选择的一些限制。

4

4 回答 4

2

如果我理解正确

SELECT txn_id
  FROM table
 WHERE txn_id <> (SELECT MAX(txn_id) FROM table WHERE account_id = 123456)
   AND account_id = 123456
于 2010-01-26T05:11:18.180 回答
2

鉴于要求:

我想做一个单一的查询,它将为所有交易获取所有交易的所有 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
于 2010-01-26T05:51:27.350 回答
1

尝试这样的事情:

select txn_id, account_id
order by txn_id desc
limit 1,18446744073709551615;
于 2010-01-26T05:14:43.040 回答
0
select txn_id from table 
where account_id = 123 and 
txn_id < (select max(txn_id) from table where account_id = 123)
于 2010-01-26T05:21:54.453 回答