c语言分组记录多个序号,[转] 分组排序取前N条记录以及生成自动数字序列,类似group by后 limit...

前言:

同事的业务场景是,按照cid、author分组,再按照id倒叙,取出前2条记录出来。

oracle里面可以通过row_number() OVER (PARTITION BY cid,author ORDER BY id DESC) 表示根据cid,author分组,在分组内部根据id排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的),而mysql数据库就没有这样的统计函数,需要自己写复杂的sql来实现。

使用动态sql来实现

先构造序列号码,引入一个@row来做rownumber

SET @row=0;SET @mid='';SELECT cid, author, @row:=@row+1 rownum FROM test ORDER BY  cid, author LIMIT 10;

序列号码已经出来了,再加一个@mid来进行分组,重点在于CASE WHEN @mid = author THEN @row:=@row+1 ELSE @row:=1 END rownum,表示分组的时候会自动从1计数指导这个分组数据遍历结束。

SET @row=0;SET @mid='';SELECT cid, author,CASE WHEN @mid = author THEN @row:=@row+1 ELSE @row:=1 END rownum, @mid:=author FROM test ORDER BY cid,author DESC LIMIT 20;

好了,再外面加一层inner JOIN 再对 rownumber 做限制 就可以拿到目标数据了。

SET @row=0;

SET @mid='';

SELECT a.*,b.rownum FROM test a

INNER JOIN (

SELECT cid, author, id, CASE WHEN @mid = author THEN @row:=@row+1 ELSE @row:=1 END rownum, @mid:=author MID

FROM test

ORDER BY cid,author,id DESC

) b ON b.author=a.author AND b.cid=a.cid AND b.id=a.id  WHERE b.rownum<3;

亲试有效哦

转载于:http://blog.itpub.net/26230597/viewspace-1267325/

mysql使用GROUP BY分组实现取前N条记录的方法

MySQL中GROUP BY分组取前N条记录实现 mysql分组,取记录 GROUP BY之后如何取每组的前两位下面我来讲述mysql中GROUP BY分组取前N条记录实现方法. 这是测试表(也不知道 ...

SQL实现分组查询取前几条记录

我要实现的功能是统计订单日志表中每一个订单的前三条日志记录,表结构如下: 一个订单在定点杆日志表中有多条记录,要根据时间查询出每一个订单的前三条日志记录,sql如下: select b.OrderNu ...

oracle 取前10条记录

1.oracle 取前10条记录 1) select * from tbname where rownum < 11; 2) select * from (select * from tbnam ...

Oracle 取前几条记录

今天看了篇文章,对oracle取前几条数据的方式和说明,总结比较全,学习了,做个记录点.oracle 取前10条记录 以下内容是原始文章内容,用于做留存阅读. 1.oracle 取前10条记录 1) ...

ORACLE&sol;MYSQL&sol;DB2等不同数据库取前几条记录

选取数据库中记录的操作是最基础最频繁的,但往往实际应用中不会这么简单,会在选取记录的时候加上一些条件,比如取前几条记录,下面就总结了如何在ORACLE/MYSQL/DB2等一些热门数据库中执行取前几条 ...

当前时间、前n天、后n天、取前n条记录、从第n条开始取m条

当前时间:NOW() 前n天:DATE_SUB(NOW(),INTERVAL n DAY) 后n天:DATE_SUB(NOW(),INTERVAL -n DAY) 取前n条记录:SELECT * FR ...

MySql多表关联,根据某列取前N条记录问题

近来遇到一个问题:“MySql多表关联,根据某列取前N条记录”. 刚开始一直在想,SQL语句是否可以做到直接查询出来,但几经折磨,还是没能写出SQL语句,-------如果有大牛的话,望指点迷津.我把 ...

MySQL中的RAND&lpar;&rpar;函数使用详解&lpar;order by rand&lpar;&rpar; 随机查询取前几条记录&rpar;

MySQL RAND()函数调用可以在0和1之间产生一个随机数: mysql> SELECT RAND( ), RAND( ), RAND( ); +------------------+--- ...

MSSQL&mdash&semi;按照某一列分组后取前N条记录

以前在开发的时候遇到过一个需求,就是要按照某一列进行分组后取前几条数据,今天又有同事碰到了,帮解决了之后顺便写一篇博客记录一下. 首先先建一个基础数据表,代码如下: IF OBJECT_ID(N'Te ...

随机推荐

Thread1&colon;EXC&lowbar;BAD&lowbar;ACCESS 错误

描述:野指针,在对象被释放之后又调用了该对象 场景:在某个UIVIewController释放之后有调用了该Controller的某些方法. 由于项目需求需要监控WebView的滚动,所以在控制器中给 ...

错误:javax&period;servlet&period;jsp&period;PageContext can not be to a type

在写Jsp文件时,引入script源文件(

下载master代码git clone http://username:password@git.wondershare.cn/XXX.git 下载指定develop分支代码git clone -b ...

性能优化 Profiler MAT 内存泄漏 堆转储 MD

Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

IE下JS保存图片

function ieSave()                   {                       var img = document.images[0];            ...

oracle goldengate 远程捕获和投递

很早之前,OGG只支持部署在数据库主机上,这叫本地化部署.而现在OGG支持远端部署,即OGG软件不安装在数据库主机上,而是安装在单独的机器上,负责数据抽取和投递. 这样做的好处: l 易于管理 - 在 ...

Codeforces Round &num;256 &lpar;Div&period; 2&rpar; C&period; Painting Fence(分治贪心)

题目链接:http://codeforces.com/problemset/problem/448/C C. Painting Fence time limit per test 1 second m ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值