CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  其他数据库开发 >  Access

Access中的查询问题,有点难度,请各位帮帮忙

楼主fhzh520(rxjy)2006-03-21 15:36:48 在 其他数据库开发 / Access 提问

有一个表如下:  
    no                 id                   日期1                           日期2                                 日期3      
    1                   1                   2005/10/20                     0                                   2006/01/03  
    2                   1                   2004/10/20                 2006/01/20                       0  
    3                   1                   0                                   2005/03/20                     2005/01/02  
    4                   2                   2005/07/02                       0                                   2005/08/02  
    5                   2                   2005/06/02                     0                                         0  
    6                   3                   2006/01/20                     0                                       2006/03/20  
    7                   3                       0                               2006/04/20                         2005/06/20    
                        ............................................................  
   
  现在要从中找出   id   相同的纪录中   日期1   ,日期2   日期3   中最大的那个纪录  
  例如:  
          结果如下:  
                      id                 日期1                           日期2                                 日期3      
                      1                   2004/10/20                 2006/01/20                           0  
                      2                   2005/06/02                     0                                         0  
                      3                       0                               2006/04/20                         2005/06/20    
   
   
  该怎么写语句啊?    
   
   
   
   
  问题点数:100、回复次数:6Top

1 楼wwwwb()回复于 2006-03-21 15:44:03 得分 20

详细一点,是取日期1   ,日期2   日期3   最大,还是其它标准?  
  比如ID=3,为什么是3                       0                               2006/04/20                         2005/06/20    
  而非3                   2006/01/20                     0                                       2006/03/20?Top

2 楼fhzh520(rxjy)回复于 2006-03-21 17:53:33 得分 0

因为2006/04/20是idwei3的纪录中日期中最大的  
  Top

3 楼wangtiecheng(不知不为过,不学就是错!)回复于 2006-03-21 22:22:16 得分 20

必须确保日期1、日期2、日期3这三个字段都是日期类型,所以不应该存在0值的情况  
   
  SELECT   表名.id,   表名.日期1,   表名.日期2,   表名.日期3  
  FROM   (SELECT   qry1.[no]  
  FROM   (SELECT   qry1.id,   Max(qry1.表达式1)   AS   表达式1之Max  
  FROM     (SELECT   表名.[no],   表名.id,   IIf(nz(日期1,'1900-01-01')>=nz(日期2,'1900-01-01'),IIf(nz(日期3,'1900-01-01')>=nz(日期1,'1900-01-01'),日期3,日期1),IIf(nz(日期3,'1900-01-01')>=nz(日期2,'1900-01-01'),日期3,日期2))   AS   表达式1  
  FROM   表名)   as   qry1  
  GROUP   BY   qry1.id  
  )   AS   qry2   INNER   JOIN   qry1   ON   (qry2.id   =   qry1.id)   AND   (qry2.表达式1之Max   =   qry1.表达式1))   as   qry4   INNER   JOIN   表名   ON   qry4.[no]=表名.[no]Top

4 楼wangtiecheng(不知不为过,不学就是错!)回复于 2006-03-21 22:30:16 得分 20

正确结果应该是  
  id                 日期1                           日期2                                 日期3      
  1                   2004/10/20                 2006/01/20                       0  
  2                   2005/07/02                       0                                   2005/08/02  
  3                       0                               2006/04/20                         2005/06/20    
   
  而不应该是搂主所说的  
  id                 日期1                           日期2                                 日期3      
  1                   2004/10/20                 2006/01/20                           0  
  2                   2005/06/02                     0                                         0  
  3                       0                               2006/04/20                         2005/06/20Top

5 楼wwwwb()回复于 2006-03-22 08:07:51 得分 20

SELECT   *  
  FROM   b102b   AS   a  
  WHERE   日期1=(select   ma   from   (SELECT   id,   max(日期1)   AS   ma1,   max(日期2)   AS   ma2,   max(日期3)   AS   ma3,   iif(ma1>ma2   and   ma1>ma3,ma1,  
  iif(ma2>ma1   and   ma2>ma3,ma2,ma3))   AS   ma  
  FROM   b102b  
  GROUP   BY   id  
  )   where   id=a.id)  
  or   日期2=(select   ma   from   (SELECT   id,   max(日期1)   AS   ma1,   max(日期2)   AS   ma2,   max(日期3)   AS   ma3,   iif(ma1>ma2   and   ma1>ma3,ma1,  
  iif(ma2>ma1   and   ma2>ma3,ma2,ma3))   AS   ma  
  FROM   b102b  
  GROUP   BY   id  
  )   where   id=a.id)  
  or   日期3=(select   ma   from   (SELECT   id,   max(日期1)   AS   ma1,   max(日期2)   AS   ma2,   max(日期3)   AS   ma3,   iif(ma1>ma2   and   ma1>ma3,ma1,  
  iif(ma2>ma1   and   ma2>ma3,ma2,ma3))   AS   ma  
  FROM   b102b  
  GROUP   BY   id  
  )   where   id=a.id);  
  Top

6 楼wwwwb()回复于 2006-03-22 14:23:52 得分 20

or  
  SELECT   A.*  
  FROM   b102b   AS   a   INNER   JOIN   [select   id,ma   from    
  (SELECT   id,   max(日期1)   AS   ma1,   max(日期2)   AS   ma2,   max(日期3)   AS   ma3,   iif(ma1>ma2   and   ma1>ma3,ma1,  
  iif(ma2>ma1   and   ma2>ma3,ma2,ma3))   AS   ma   FROM   b102b   GROUP   BY   id)].   AS   B   ON   (a.id=b.id)   AND   (a.日期1=b.MA   or   a.日期2=b.ma   OR   a.日期3=b.MA);  
  Top

相关问题

  • 个人认为有点难度的一条查询语句,求各位帮忙~~~~~
  • 请各位高手帮帮我啊,超难度的查询问题!
  • 高难度,多表查询
  • 我有一个综合查询要问,有一定难度。请教各位。谢谢!
  • (急!)有点难度的查询语句
  • 高难度的查询生成问题
  • 查询的高难度问题
  • 关于查询的高难度问题
  • 高难度sql 查询语句编写
  • 超难度查询!!!如何做这样的查询?????

关键词

  • 日期
  • qry
  • 表达式
  • nz
  • 表名
  • iif
  • 纪录
  • 应该
  • select

得分解答快速导航

  • 帖主:fhzh520
  • wwwwb
  • wangtiecheng
  • wangtiecheng
  • wwwwb
  • wwwwb

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

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