我想查询指定值的指定条记录,折腾了一个上午,还是不会,向大家请教,看怎么实现。
表结构
CREATE TABLE `test` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(20) NOT NULL,
  `class` int(4) NOT NULL,
  PRIMARY KEY  (`id`)
)INSERT INTO `test` VALUES (1, '篮球', 1);
INSERT INTO `test` VALUES (2, '足球', 1);
INSERT INTO `test` VALUES (3, '羽毛球', 1);
INSERT INTO `test` VALUES (4, '乒乓球', 1);
INSERT INTO `test` VALUES (5, '唱歌', 2);
INSERT INTO `test` VALUES (6, '跳舞', 2);
INSERT INTO `test` VALUES (7, '笛子', 2);
INSERT INTO `test` VALUES (8, '钢琴', 2);
INSERT INTO `test` VALUES (9, '奥数', 3);
INSERT INTO `test` VALUES (10, '物理', 3);
INSERT INTO `test` VALUES (11, '写作', 4);取出每个class相同值的两条记录,超过两条就只取两条,不足两条就取全部,期望结果如下。  id  name  class  
   1   篮球   1 
   2   足球   1  
   5   唱歌   2 
   6   跳舞   2 
   9   奥数   3 
   10  物理   3 
   11  写作   4 谢谢大家了。

解决方案 »

  1.   

    mysql> select * from test;
    +----+--------+-------+
    | id | name   | class |
    +----+--------+-------+
    |  1 | 篮球   |     1 |
    |  2 | 足球   |     1 |
    |  3 | 羽毛球 |     1 |
    |  4 | 乒乓球 |     1 |
    |  5 | 唱歌   |     2 |
    |  6 | 跳舞   |     2 |
    |  7 | 笛子   |     2 |
    |  8 | 钢琴   |     2 |
    |  9 | 奥数   |     3 |
    | 10 | 物理   |     3 |
    | 11 | 写作   |     4 |
    +----+--------+-------+
    11 rows in set (0.00 sec)mysql>
    mysql> select * from test a
        -> where (select count(*) from test
        ->  where class=a.class and id<a.id)<2;
    +----+------+-------+
    | id | name | class |
    +----+------+-------+
    |  1 | 篮球 |     1 |
    |  2 | 足球 |     1 |
    |  5 | 唱歌 |     2 |
    |  6 | 跳舞 |     2 |
    |  9 | 奥数 |     3 |
    | 10 | 物理 |     3 |
    | 11 | 写作 |     4 |
    +----+------+-------+
    7 rows in set (0.00 sec)mysql>