Select unique records limit with N rows

后端 未结 4 1280
悲哀的现实
悲哀的现实 2020-12-12 06:29

I have database records shown below,

id  | dataId    | value
1   |    1      |   xxx 
2   |    1      |   xx1
3   |    1      |   xx2
4   |    1      |   xx         


        
4条回答
  •  温柔的废话
    2020-12-12 07:11

      DROP TABLE IF EXISTS my_table;
    
      CREATE TABLE my_table
      (id  INT NOT NULL AUTO_INCREMENT PRIMARY KEY
      ,dataId INT NOT NULL    
      ,value VARCHAR(12) NOT NULL
      );
    
      INSERT INTO my_table VALUES
      (1   ,1      ,'xxx'),
      (2   ,1      ,'xx1'),
      (3   ,1      ,'xx2'),
      (4   ,1      ,'xx1'),
      (5   ,2      ,'yyy'),
      (6   ,2      ,'yy1'),
      (7   ,2      ,'yy2'),
      (8   ,1      ,'zzz'),
      (9   ,2      ,'yy3'); 
    
      SELECT x.* 
        FROM my_table x 
        JOIN my_table y  
          ON y.dataid = x.dataid 
         AND y.id >= x.id 
       GROUP 
          BY dataid
           , id 
      HAVING COUNT(*) <= 3 
       ORDER 
          BY dataid
           , id DESC;
      +----+--------+-------+
      | id | dataId | value |
      +----+--------+-------+
      |  8 |      1 | zzz   |
      |  4 |      1 | xx1   |
      |  3 |      1 | xx2   |
      |  9 |      2 | yy3   |
      |  7 |      2 | yy2   |
      |  6 |      2 | yy1   |
      +----+--------+-------+
      6 rows in set (0.03 sec)
    
      mysql>
    

提交回复
热议问题