CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

请教一个查询

楼主wingswings(wings)2005-05-11 16:20:49 在 MS-SQL Server / 基础类 提问

 
  我现在需要查询一张表中根据Name在某个时间段内的最后一条记录  
  比方说有这样一张表  
  name   value   time  
  ----------------  
  aaa   1   2005-05-1   09:30:20  
  bbb   2   2005-05-1   09:39:26  
  aaa   2   2005-05-1   09:39:50  
  ccc   3   2005-05-1   09:49:20  
  ddd   3   2005-05-1   09:59:20  
  aaa   1   2005-05-10   09:30:20  
  bbb   2   2005-05-10   09:39:26  
  aaa   2   2005-05-10   09:39:50  
  ccc   3   2005-05-10   09:49:20  
  fff   3   2005-05-10   09:59:20  
   
  当要查   2005-05-1   时应该返回为  
  name   value   time  
  ----------------  
  bbb   2   2005-05-1   09:39:26  
  aaa   2   2005-05-1   09:39:50  
  ccc   3   2005-05-1   09:49:20  
  ddd   3   2005-05-1   09:59:20  
   
  查   2005-05-2   时返回   空  
  name   value   time  
  ----------------  
   
  查   2005-05-10   时返回为  
  name   value   time  
  ----------------  
  bbb   2   2005-05-10   09:39:26  
  aaa   2   2005-05-10   09:39:50  
  ccc   3   2005-05-10   09:49:20  
  fff   3   2005-05-10   09:59:20  
   
  我想了个笨办法,因为name是已知范围的,  
  就按name来查再把它们union到一块,可是未免太笨了些,不知有什么好办法吗 问题点数:20、回复次数:5Top

1 楼talantlee(小刀(bluedagger.cn))回复于 2005-05-11 16:35:07 得分 3

select   name   ,max(value),   max(time)   from   表   group   by   name  
  Top

2 楼wingswings(wings)回复于 2005-05-11 16:38:02 得分 0

可能是我没说明白,和value是无关的,再说明一下  
  需要查询一张表中根据Name在某个时间段内的最后一条记录  
  比方说有这样一张表  
  name   value   time  
  ----------------  
  aaa   1   2005-05-1   09:30:20  
  bbb   1   2005-05-1   09:39:26  
  aaa   1   2005-05-1   09:39:50  
  ccc   1   2005-05-1   09:49:20  
  ddd   1   2005-05-1   09:59:20  
  aaa   1   2005-05-10   09:30:20  
  bbb   1   2005-05-10   09:39:26  
  aaa   1   2005-05-10   09:39:50  
  ccc   1   2005-05-10   09:49:20  
  fff   1   2005-05-10   09:59:20  
   
  当要查   2005-05-1   时应该返回为  
  name   value   time  
  ----------------  
  bbb   1   2005-05-1   09:39:26  
  aaa   1   2005-05-1   09:39:50  
  ccc   1   2005-05-1   09:49:20  
  ddd   1   2005-05-1   09:59:20  
   
  查   2005-05-2   时返回   空  
  name   value   time  
  ----------------  
   
  查   2005-05-10   时返回为  
  name   value   time  
  ----------------  
  bbb   1   2005-05-10   09:39:26  
  aaa   1   2005-05-10   09:39:50  
  ccc   1   2005-05-10   09:49:20  
  fff   1   2005-05-10   09:59:20  
   
  如果查   所有   2005-05   则返回  
  name   value   time  
  ----------------  
  ddd   1   2005-05-1   09:59:20  
  bbb   1   2005-05-10   09:39:26  
  aaa   1   2005-05-10   09:39:50  
  ccc   1   2005-05-10   09:49:20  
  fff   1   2005-05-10   09:59:20  
   
  我想了个笨办法,因为name是已知范围的,  
  就按name来查再把它们union到一块,可是未免太笨了些,不知有什么好办法吗Top

3 楼wingswings(wings)回复于 2005-05-11 16:42:56 得分 0

to   talantlee:  
  我试过,如果这样查的话,value   和   time会对应不上的,错位了Top

4 楼comerliang(天地良心)(性欲被自己倒分倒没了,以后再也不敢倒分了,想倒分的兄弟看看我的下场吧,男人没了性欲真不爽)回复于 2005-05-11 17:26:52 得分 17

--建立测试环境  
  Create   Table   tanme(name   varchar(10),value   varchar(10),time   varchar(100))  
  --插入数据  
  insert   into   tanme  
  select   'aaa','1','2005-05-1   09:30:20'   union  
  select   'bbb','2','2005-05-1   09:39:26'   union  
  select   'aaa','2','2005-05-1   09:39:50'   union  
  select   'ccc','3','2005-05-1   09:49:20'   union  
  select   'ddd','3','2005-05-1   09:59:20'   union  
  select   'aaa','1','2005-05-10   09:30:20'   union  
  select   'bbb','2','2005-05-10   09:39:26'   union  
  select   'aaa','2','2005-05-10   09:39:50'   union  
  select   'ccc','3','2005-05-10   09:49:20'   union  
  select   'fff','3','2005-05-10   09:59:20'  
  select   *   from   tanme  
  --测试语句  
   
  declare   @adate   datetime  
  set   @adate   =   '2005-05-01'  
  print   @adate  
   
  select   *   from   tanme   where   time   in   (  
  Select   max(time)   from   tanme   where     [time]   >=   convert(char(20),@adate,111)     and   [time]   <     convert(char(20),@adate+1,111)    
  group   by   name  
  )  
  and   [time]   >=   convert(char(20),@adate,111)     and   [time]   <     convert(char(20),@adate+1,111)    
   
   
  --删除测试环境  
  Drop   Table   tanme  
   
  /*  
  --结果  
  05     1   2005   12:00AM  
  name               value               time                                                                                                        
  ----------   -----------   ------------------------------------------------------    
  aaa                 2                       2005-05-01   09:39:50.000  
  bbb                 2                       2005-05-01   09:39:26.000  
  ccc                 3                       2005-05-01   09:49:20.000  
  ddd                 3                       2005-05-01   09:59:20.000  
   
  (所影响的行数为   4   行)  
  */  
  Top

5 楼wingswings(wings)回复于 2005-05-11 17:33:17 得分 0

to   comerliang(天地良心)   :  
  谢谢,要的就是这个结果,原来   in   还有这个用法啊Top

相关问题

  • 查询
  • 查询?
  • 查询
  • 查询
  • 查询
  • 查询
  • 查询
  • 查询
  • 查询
  • 查询

关键词

  • aaa
  • ccc
  • bbb
  • 返回
  • time

得分解答快速导航

  • 帖主:wingswings
  • talantlee
  • comerliang

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo