限制多个字段的结果(MySQL)


Limiting Results of Multiple Fields (MySQL)

我的表结构如下:

      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