使用ROW_NUMBER和partition by解决报表中的查询问题

来源:未知 责任编辑:责任编辑 发表时间:2014-04-20 03:41 点击:

 在报表中遇到一个查询问题: 原始数据如下:

 
Id    cust_id      call_date         call_result
1   1   2012-03-15 09:00:00 fail
2   1   2012-03-15 09:05:00 number error
3   1   2012-03-15 09:10:00 fail
4   1   2012-03-15 09:15:00 success
5   2   2012-03-15 09:01:00 fail
6   2   2012-03-15 09:06:00 number error
7   2   2012-03-15 09:17:00 fail
8   2   2012-03-15 09:18:00 success
9   3   2012-03-15 09:04:00 fail
10  3   2012-03-15 09:09:00 number error
11  3   2012-03-15 09:19:00 fail
12  3   2012-03-15 09:22:22 success
13  4   2012-03-15 09:07:00 fail
14  4   2012-03-15 09:21:40 success
  查询出每个cust_id对应的前三条记录:

   思路: 使用ROWNUMBER 和 partition by 对每个cust_id对应的记录产生序号, 然后对产生的序号列操作,产生查询出的结果集。

 
select Id,cust_id,call_date,call_result from (
select ROW_NUMBER() over(partition by cust_id order by call_date) as [rows],*
from cust_result)a where a.rows<=3
 列表:  
1   1   2012-03-15 09:00:00 fail
2   1   2012-03-15 09:05:00 number error
3   1   2012-03-15 09:10:00 fail
5   2   2012-03-15 09:01:00 fail
6   2   2012-03-15 09:06:00 number error
7   2   2012-03-15 09:17:00 fail
9   3   2012-03-15 09:04:00 fail
10  3   2012-03-15 09:09:00 number error
11  3   2012-03-15 09:19:00 fail
13  4   2012-03-15 09:07:00 fail
14  4   2012-03-15 09:21:40 success



本文来自于博客园 作者 garfieldzf

    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    用户名: 验证码:点击我更换图片
    最新评论 更多>>

    推荐热点

    • sql常见面试题
    • SQL SERVER 2005性能之跟踪
    • SQL编程(一)
    • LINUX上RMAN自动备份脚本
    • sql server面试题
    • 如何将多个SQL查询统计结果一次显示出来
    • 浅谈SQL Server中的事务日志(三)----在简单恢复模式下日志的角色
    • SQL小技巧系列 --- 行转列合并
    • sql server 列转行
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
    Copyright © 2008-2015 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1