MySQL 从最后 N 组中选择所有行

标签 mysql sql database group-by sqlalchemy

我有一个这样的数据集,其中每笔交易可以有多个交易

| 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/

相关文章:

mysql - 每行动态sql

php - 如何使用 php 从 json 到 mysql 只插入数组中尽可能多的项目

mysql - 让我的 SQL 查询更有效率

sql - Postgres 中的 RIGHT() 函数不正确

database - Laravel SelectRaw 与数据库 :Raw

mysql - 如何将 GWT 与 Apache Shiro 散列和加盐一起使用

sql - 如何在 SQL 中获取具有重复列组合的记录?

mysql - MySql 触发器中的 NEW.some_column 的 SQL Server 模拟是什么?

database - golang 数据库更新一个不存在的条目

PHP:如何从另一个类中的方法捕获异常?