Mysql从第二列获得前3个值,并转到col 1

时间:2017-03-13 14:37:00

标签: mysql

我得到了一张如下表所示的表格,我做了一个SQL的结果:

COL1  |     COL2
1     |      1
1     |      2
1     |      3
1     |      4
1     |      5
1     |      6
2     |      1
2     |      2
2     |      3
2     |      4
3     |      1
3     |      2
4     |      1
4     |      2
4     |      3
4     |      4

所以我想得到COL2的前3个值(即使没有3个记录,如COL1 - 值3),结果如下:

COL1  |     COL2
1     |      1
1     |      2
1     |      3
2     |      1
2     |      2
2     |      3
3     |      1
3     |      2
4     |      1
4     |      2
4     |      3

1 个答案:

答案 0 :(得分:0)

使用BETWEEN应该有效:

select * from mytable 
where COL2 between 1 and 3
order by COL1, COL2;

工作演示:http://rextester.com/QIIZ51160

注意:如果每个组中的前三个值不总是介于1和3之间,则必须使用其他方法。此查询将为COL1中的每个值提供第二列中的前3个值:

select COL1, COL2, rank
    from 
        (select COL1, COL2, 
            @rank := IF(@curr = COL1, @rank + 1, 1) AS rank,
            @curr := COL1 
         FROM mytable
         ORDER BY COL1, COL2
        ) ranked
    where rank <= 3;

工作演示:http://sqlfiddle.com/#!9/605c7/1/0