注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

每日聊的博客

 
 
 

日志

 
 
 
 

SQl用排序的方法取记录。可以很方便的取第一条记录  

2016-07-16 11:49:19|  分类: SQL |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

如查是取唯一用还是用 group by 后取max 来的运行快,但如果是取整条记录,且还有其它排序的。用分类排序后取1要运行快。

SELECT * FROM(
select *,ROW_NUMBER() OVER(PARTITION BY z.CustomerID ORDER BY z.lastUpTime desc) Rn from CarInfo z
) t WHERE t.Rn=1

实例:

declare @Tab table 
(a int, b varchar(2),   c DATETIME) 
insert into @tab select 1    ,'a',        '2009/05/01' 
insert into @tab select 2    ,'a',        '2009/05/10' 
insert into @tab select 3    ,'a',        '2009/05/03' 
insert into @tab select 4    ,'b',        '2009/05/04' 
insert into @tab select 5    ,'b',        '2009/05/05' 
insert into @tab select 6    ,'c',        '2009/05/06' 
insert into @tab select 7    ,'c',        '2009/05/07' 
insert into @tab select 8    ,'e',        '2009/05/08' 
insert into @tab select 9    ,'a',        '2009/05/02' 
insert into @tab select 10    ,'a',        '2009/05/10' 

取最大的方法在这种情况下就不适用了。只适用于取分组数据最大的。不适用于用其它的值来排序后取一条的。
select * from @Tab z,(select b,max(c) as max_c from @Tab group by b) z1
where z.b = z1.b and z.c = z1.max_c

正确的方法如下。
 SELECT * FROM(
select *,ROW_NUMBER() OVER(PARTITION BY z.b ORDER BY z.c desc,z.a) Rn from @Tab z
) t WHERE t.Rn=1;
  评论这张
 
阅读(44)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017