选择每个ID的前3次出现

时间:2016-03-26 21:05:48

标签: mysql sql

我有下表

ID | date   
1   | 2016-01-01   
1   | 2016-01-02   
1   | 2016-02-01   
1   | 2016-03-01  
1   | 2016-03-11   
2   | 2016-01-01   
2   | 2016-01-03   
2   | 2016-01-05   
2   | 2016-02-01   
2   | 2016-03-01   
3   | 2016-01-03   
3   | 2016-01-04   
3   | 2016-01-05   
3   | 2016-01-06 

我需要查询从每个ID返回前3个日期,结果应为:

ID | date   
1   | 2016-01-01   
1   | 2016-01-02   
1   | 2016-02-01   
2   | 2016-01-01   
2   | 2016-01-03   
2   | 2016-01-05   
3   | 2016-01-03   
3   | 2016-01-04   
3   | 2016-01-05 

1 个答案:

答案 0 :(得分:4)

您可以使用变量:

SELECT ID, `date`
FROM (
  SELECT ID, `date`,
         @rn := IF(@id = ID, @rn + 1,
                   IF(@id := ID, 1, 1)) AS rn
  FROM mytable
  CROSS JOIN (SELECT @rn := 0, @id := 0) AS vars
  ORDER BY ID, `date`) AS t
WHERE t.rn <= 3