关于mysql中一个分类排序的语句问题
2016-09-09 18:03
369 查看
工具:Navicat
在工作中遇到这个问题,目的很简单,在一张表中,有一个类型字段,要根据不同的类型取出前几条数据。问题看似简单,但写sql的过程却不那么容易了。开始谢了一条很长很复杂的sql语句,虽然功能可以实现,但语句太长影响观感,而且耗时。所以想办法优化了一下。这是数据表,取每个stype的牵手那条数据。
这是最终版的sql语句:
SELECT id,title,sunit,path,sdate,stype,rank FROM
(SELECT *,@rownum:=@rownum+1 AS rownum,IF(@pa=ff.stype,@rank:=@rank+1,@rank:=1) AS rank,@pa:=ff.stype
FROM
(SELECT id,title,sunit,path,sdate,stype FROM t_sqxfwcp_log g GROUP BY stype,sdate ORDER BY stype,sdate DESC) ff,(SELECT @rank:=0,@rownum:=0,@pa=NULL) tt) result
where rank<=3 order by sdate DESC
这是最终结果:
在工作中遇到这个问题,目的很简单,在一张表中,有一个类型字段,要根据不同的类型取出前几条数据。问题看似简单,但写sql的过程却不那么容易了。开始谢了一条很长很复杂的sql语句,虽然功能可以实现,但语句太长影响观感,而且耗时。所以想办法优化了一下。这是数据表,取每个stype的牵手那条数据。
这是最终版的sql语句:
SELECT id,title,sunit,path,sdate,stype,rank FROM
(SELECT *,@rownum:=@rownum+1 AS rownum,IF(@pa=ff.stype,@rank:=@rank+1,@rank:=1) AS rank,@pa:=ff.stype
FROM
(SELECT id,title,sunit,path,sdate,stype FROM t_sqxfwcp_log g GROUP BY stype,sdate ORDER BY stype,sdate DESC) ff,(SELECT @rank:=0,@rownum:=0,@pa=NULL) tt) result
where rank<=3 order by sdate DESC
这是最终结果:
相关文章推荐
- 【mysql】一个关于order by排序的问题
- 解决一个mysql关于按文章以及评论的最早时间的排序问题
- 关于统计的一个sql问题,使用动态sql语句实现。
- 关于《一个SQL语句查询问题(查询最小值)(急)》回复里面没有正确理想的答案!
- 关于一个sql语句需要使用约等于的问题
- 关于mysql 隐式转换的一个小问题
- 关于mysql使用索引的一个问题
- 解决了一个关于mysql登陆的问题.
- 关于一个MYSQL语法(在查询中使用count)的兼容性问题
- 一个关于Oracle更新语句引发的时间字段类型的问题
- mysql中关于SELECT *,concat(ItemName,ProductID) as ItemName FROM `t_product`的语句最后的ItemName的值的问题解释
- 一个关于sql语句的问题解决,包括:字符串拆分,游标
- (求助)一个关于ACCESS数据库转化到MYSQL后的处理问题
- 关于C#中MySQL语句带参数的模糊匹配问题
- MYSQL DDL语句 与 DML 在一个事物中的问题。
- 一个关于时间的SQL分组排序问题
- 今天遇到一个关于STL中排序的问题, 怀疑是sort的bug!
- 一个关于nvarchar字段排序,中英文混合排序的问题
- 一个关于特殊的排序问题的研究
- mysql 关于not null的一个问题