我有一个这样的数据集,其中每笔交易可以有多个交易
| tx_id | trade_id |
--------------------
| 100 | 11 |
| 99 | 11 |
| 98 | 11 |
| 97 | 10 |
| 96 | 10 |
| 95 | 9 |
| 94 | 9 |
| 93 | 8 |
...
我想从最近 N 笔交易中选择所有交易。例如,如果我想从最后 2 笔交易中选择所有行,我会得到:
| tx_id | trade_id |
--------------------
| 100 | 11 |
| 99 | 11 |
| 98 | 11 |
| 97 | 10 |
| 96 | 10 |
我不能保证 trade_id
的间隔始终为 1。
如何在 mysql 中完成此操作?
最佳答案
这也适用于 mysql 5
更改 linit ,您可以选择要接收的交易数量
CREATE TABLE tab1 ( `tx_id` INTEGER, `trade_id` INTEGER ); INSERT INTO tab1 (`tx_id`, `trade_id`) VALUES ('100', '11'), ('99', '11'), ('98', '11'), ('97', '10'), ('96', '10'), ('95', '9'), ('94', '9'), ('93', '8');
SELECT t1.* FROM tab1 t1 JOIN (SELECT DISTINCT `trade_id` FROM tab1 ORDER BY `trade_id` DESC LIMIT 2) t2 ON t1.`trade_id` = t2.`trade_id`
tx_id | trade_id ----: | -------: 100 | 11 99 | 11 98 | 11 97 | 10 96 | 10
db<> fiddle here
关于MySQL 从最后 N 组中选择所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71040049/