【发布时间】:2022-01-20 07:42:11
【问题描述】:
我有一个包含订单事件的 MariaDB 表:
| EVENTID | ORDERID | DATA | TIMESTAMP |
|---|---|---|---|
| 1 | 1 | 'stuff1' | 2021-12-17 11:48:00.000 |
| 2 | 1 | 'newstuff1' | 2021-12-17 11:49:00.000 |
| 3 | 1 | 'newerstuff1' | 2021-12-17 11:49:30.000 |
| 4 | 2 | 'stuff2' | 2021-12-17 11:50:00.000 |
| 5 | 3 | 'stuff3' | 2021-12-17 11:51:10.000 |
| 6 | 3 | 'newstuff3' | 2021-12-17 11:52:00.000 |
我需要获取每个订单的最新事件。 所以对于这个数据集,结果应该是
| EVENTID | ORDERID | DATA | TIMESTAMP |
|---|---|---|---|
| 3 | 1 | 'newerstuff1' | 2021-12-17 11:49:30.000 |
| 4 | 2 | 'stuff2' | 2021-12-17 11:50:00.000 |
| 6 | 3 | 'newstuff3' | 2021-12-17 11:52:00.000 |
我正在使用相关子查询来实现这一点:
SELECT *
FROM MESSAGES m1
WHERE TIMESTAMP = (SELECT MAX(TIMESTAMP)
FROM MESSAGES m2 WHERE m1.ORDERID = m2.ORDERID);
但是对于大容量来说这很慢,所以我想知道是否有一种方法可以使用连接或分组来改进查询。否则,如果有帮助,我愿意将数据拆分到不同的表中。
【问题讨论】:
-
什么版本的玛丽亚?
标签: mysql mariadb subquery groupwise-maximum