0

次のようなテーブルを検討してください。

| | txn_id | アカウントID

トランザクションが account_id の最新 (最高の txn_id) ではないすべてのトランザクションのすべての txn_ids を取得する単一のクエリを実行したいと思います。

データベースは 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

要件を考えると:

トランザクションが account_id の最新 (最高の txn_id) ではないすべてのトランザクションのすべての txn_id を取得する単一のクエリを実行したいと思います。

一度に 1 つのアカウントのトランザクション 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 に答える