【发布时间】:2014-01-25 01:09:52
【问题描述】:
我有一个transaction 表,其架构类似于
id | order_id | response | amount
1 | 2 |'payment' | 1000
2 | 5 |'declined'| 0
3 | 5 |'declined'| 0
4 | 5 |'payment' | 500
5 | 5 |'declined'| 0
6 | 11 |'declined'| 0
7 | 11 |'declined'| 0
9 | 11 |'declined'| 0
我想做的是找到所有订单,其中该订单的三个最新交易被“拒绝”。假设 id 越高,交易越新(或者您可以假设有 created_at 列)。
在上述情况下,应该返回的唯一 order_id 是 11,因为 order_id 5 有 3 笔被拒绝的交易,最近的 3 笔交易是 D P D
是否有一种干净的方法可以使用在合理的时间内运行的纯 sql 来执行此操作(假设 ~50M 行)。
【问题讨论】:
-
您表中的记录似乎没有在任何地方记录其时间戳...您如何建议确定哪些是“最新的”?
-
...并添加更多示例数据。在开发查询时,您要确定它涵盖所有情况,对吗?因此,您的示例数据至少应该包含正确查询返回的数据。
-
我编辑了问题,因此您可以假设存在 created_at 列或 id 列随时间单调增加。它对解决方案应该没有太大影响。
标签: mysql