我的表格结构如下:
mid | tid | data
| 1 | 0 | data
| 1 | 1 | data
| 1 | 2 | data
| 1 | 3 | data
| 1 | 4 | data
| 2 | 0 | data
| 2 | 1 | data
| 3 | 0 | data
| 3 | 1 | data
| 3 | 2 | data
| 4 | 0 | data
.
.
.
| N | 0 | data
| N | 1 | data
| N | 2 | data
.
.
| N | K | data
每条记录由2个索引标识,即mid和tid。每个中间的tid都是独一无二的。对于每个中间,tid从0开始向上计数到K.对于给定的mid,可能会有很多时间,并且可以有无数个中频。
我想要做的是选择3个最新的MID及其相应的最新tid数据符合某些条件(例如> 1)。如果仅MID 1,2,3和4满足数据要求,我希望它返回(省略1,因为它不是最近的3,而是第4):
| 2 | 1 | data
| 3 | 2 | data
| 4 | 0 | data
我迷失了如何做到这一点,任何帮助将不胜感激。 LIMIT 3的双重订单将返回
| 3 | 1 | data
| 3 | 2 | data
| 4 | 0 | data
答案 0 :(得分:2)
JOIN
针对每个MAX(tid)
得到mid
的子查询:
SELECT
t.mid,
t.tid,
t.data
FROM tbl t JOIN (
SELECT mid, MAX(tid) AS maxtid FROM tbl GROUP BY mid
) m ON t.mid = m.mid AND t.tid = m.tid
/* WHERE (some condition) */
ORDER BY t.mid DESC
LIMIT 3
更新:添加了ORDER BY
& LIMIT
条款,我在OP中错过了。
答案 1 :(得分:0)
您可以这样做:
SELECT * FROM data_table
WHERE
mid IN (SELECT DISTINCT mid FROM data_table ORDER BY mid DESC LIMIT 3) AND
data > 1