考慮類似這樣的表格:查找「舊」行
| txn_id | account_id
我想要做一個單一的查詢,它將爲我所有txn_ids的事務處理不是最近的(最高txn_id)account_id的所有事務處理。
該數據庫是MySQL 5.1,所以這可能暗示子選擇周圍的一些限制。
考慮類似這樣的表格:查找「舊」行
| txn_id | account_id
我想要做一個單一的查詢,它將爲我所有txn_ids的事務處理不是最近的(最高txn_id)account_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
否。至少,您需要使用'WHERE account_id = 123456'來限定子選擇。請參閱artemb的答案是否這樣做。 –
D'oh ..絕對。我修復了我的回答 – adamJLev
select txn_id from table
where account_id = 123 and
txn_id < (select max(txn_id) from table where account_id = 123)
這對一個帳戶一次很好。我認爲問題在於爲每個account_id值執行相應的聲明。 –
鑑於要求:
我想要做一個查詢將獲得所有交易不是最近的交易的所有txn_id (最高txn_id)爲account_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
感謝大家的幫助。我認爲MySQL太愚蠢了,無法以足夠的性能提出任何建議,所以我必須做一些醜陋的解決方法,但是我非常感謝幫助。當我在另一個更好的數據庫項目上時,我會使用這些建議。 – Paul