我的表结构如下:
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
每个记录由两个索引标识,一个是mid,另一个是tid。tid对每个mid都是唯一的。对于每个mid,tid从0开始,向上计数到K。对于给定的mid,可能会有很多tid,也可能有无限多的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
JOIN
针对子查询,该子查询为每个mid
:获取MAX(tid)
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中遗漏了它。
您可能可以这样做:
SELECT * FROM data_table
WHERE
mid IN (SELECT DISTINCT mid FROM data_table ORDER BY mid DESC LIMIT 3) AND
data > 1