2016-07-06 68 views
0

这里前n记录组是我的表例如:如何获得通过通配符

+--------+-------------+ 
| id  | city_detail | 
+--------+-------------+ 
| 1  | 12_hyd_test | 
| 2  | 13_blr_test | 
| 3  | 15_blr_test | 
| 4  | 18_hyd_test | 
| 5  | 17_coi_test | 
| 6  | 22_coi_test | 
| 7  | 62_hyd_test | 
| 8  | 72_blr_test | 
| 9  | 92_blr_test | 
| 10  | 42_hyd_test | 
| 11  | 21_coi_test | 
| 12  | 82_coi_test | 
+--------+-------+-----+ 

从这个表,怎么样的条件使用与GROUP BY选择这样

+--------+-------------+ 
| id  | city_detail | 
+--------+-------------+ 
| 12  | 82_coi_test | 
| 11  | 21_coi_test | 
| 10  | 42_hyd_test | 
| 7  | 62_hyd_test | 
| 9  | 92_blr_test | 
| 8  | 72_blr_test | 
+--------+-------+-----+ 

在每城市只显示两个结果(%coi%%hyd%或'%blr%')按ID排序DESC

+1

向我们显示您当前的查询尝试。 – jarlh

+0

我试过这个查询选择id,city_detail从tble_name在哪里(city_detail像'%coi%'或者city_detail像'%hyd%'或者city_detail像'%blr%')order by id desc –

回答

0

也许最简单的方法是使用变量:

select e.* 
from (select e.*, 
      (@rn := if(@c = substr(city_detail, 4), @rn + 1, 
         if(@c := substr(city_detail, 4), 1, 1 
         ) 
      ) as seqnum 
     from example e cross join 
      (select @c := '', @rn := 0) params 
     order by substr(city_detail, 4) 
    ) e 
where rn <= 2;