股票数据
ticker date open high low close volume
--------------------------------------------------------------
AAA 2014-06-16 0.9 0.9 0.89 0.895 542
AAA 2014-06-15 1.32 1.33 1.31 1.32 2792
AAA 2014-06-14 1.19 1.25 1.19 1.25 417
AAA 2014-06-13 0.715 0.715 0.705 0.71 36526
BBB 2014-06-16 0.9 0.9 0.89 0.895 542
BBB 2014-06-15 1.32 1.33 1.31 1.32 2792
BBB 2014-06-14 1.19 1.25 1.19 1.25 417
BBB 2014-06-13 0.715 0.715 0.705 0.71 36526
CCC 2014-06-16 0.9 0.9 0.89 0.895 542
CCC 2014-06-15 1.32 1.33 1.31 1.32 2792
CCC 2014-06-14 1.19 1.25 1.19 1.25 417
CCC 2014-06-13 0.715 0.715 0.705 0.71 36526
我想选择每个股票的最新3条记录,以便它会像上面那样从上表中返回下面的行;
AAA 2014-06-16 0.9 0.9 0.89 0.895 542
AAA 2014-06-15 1.32 1.33 1.31 1.32 2792
AAA 2014-06-14 1.19 1.25 1.19 1.25 417
BBB 2014-06-16 0.9 0.9 0.89 0.895 542
BBB 2014-06-15 1.32 1.33 1.31 1.32 2792
BBB 2014-06-14 1.19 1.25 1.19 1.25 417
CCC 2014-06-16 0.9 0.9 0.89 0.895 542
CCC 2014-06-15 1.32 1.33 1.31 1.32 2792
CCC 2014-06-14 1.19 1.25 1.19 1.25 417
答案 0 :(得分:3)
您可以使用用户定义的变量对每个股票代码组的每个记录进行排名,而在外部选择只按级别过滤它们
SELECT t.* FROM (
SELECT s.*,
@rank:= CASE WHEN @group = s.ticker THEN @rank +1 ELSE 1 END rank ,
@group:= s.ticker g
FROM
`stock` s
JOIN (SELECT @group:='',@rank:='') t
ORDER BY ticker ,`date` DESC
) t WHERE t.rank <=3