有以下表的数据:
cust-code   cust-name   unit_price    reply_date      REMARKS   
AAAA         AVNET        0.352        06/11/2008    
AAAC         AVNET        0.000        06/11/2008
BBBB         ARROW        0.000        06/11/2008      NO QUOTE
BBBC         ARROW                     06/11/2008      NO QUOTE
CCCC         FUTURE       0.586        06/10/2008      
CCCD         FUTURE                    06/11/2008      NO QUOTE从此表中找出每个客户名最后有效报价,若该客户没有报过价,也应该出现.应查询出以下结果:
CUST-code    cust-name     unit_price     reply_date      REMARKS
AAAA          AVNET         0.352         06/11/2008
BBBC          ARROW                       06/11/2008      NO QUOTE
CCCC          FUTURE        0.586         06/10/2008在线等待答案. 多谢!

解决方案 »

  1.   

    BBBB        ARROW        0.000        06/11/2008      NO QUOTE 
    BBBC        ARROW                    06/11/2008      NO QUOTE
    没看明白规律
    这里为什么要取第二条?
      

  2.   

    默认每条数据是有REPLY_ID 的, 排在后面的ID大些. 就是说CUST的回复报价新一些.
      

  3.   

    select cust-code,cust-name,unit_price,reply_date,REMARKS
    from tb
    where
    REPLY_ID in(select max(REPLY_ID) from tb group by cust-name)
      

  4.   

    首先谢谢你的关注.
    若该表再更新一条记录
    cust-code  cust-name  unit_price    reply_date      REMARKS    
    CCCF        FUTURE      0.205        06/09/2008      NO QUOTE 实质上是不影响查询结果, 因为这个CUST的报价日期是06/09/2008,早于06/10/2008.
    按你的SQL 语句查询是错误的。
      

  5.   

    补充完整的查询目的: 取出每个客户的最新最低报价,若该客户无报价但有REMARKS,也出现在查询结果中.
    即: 若客户AVNET 在06/09/2008 报了 0.158,而在06/11/2008 开始报了0.305,接着在这一天又报了0.425. 那么我门取0.305的报价.
    若客户FUTURE 在整个过程中都无报价但有REMARKS, 则在查询结果中出现最后一条回复报价的记录信息.
    若客户ARROW 在整个过程中无报价无REMARKS, 则在查询结果中不出现该客户记录.谢谢!
      

  6.   

    unit_price 设置默认值 0.000
    unit_price=null 和 unit_price is null 涉及到 ANSI SQL 标准问题要先解决设置默认值比较妥当
    cust-code  cust-name  unit_price    reply_date      REMARKS  
    AAAA        AVNET        0.352        06/11/2008    
    AAAC        AVNET        0.000        06/11/2008 
    BBBB        ARROW        0.000        06/11/2008      NO QUOTE 
    BBBC        ARROW        0.000        06/11/2008      NO QUOTE 
    CCCC        FUTURE       0.586        06/10/2008      
    CCCD        FUTURE       0.000        06/11/2008      NO QUOTE 表现在是这样select distinct cust-name from [表格名称] where not unit_price=0.000 order by reply_date desc
      

  7.   

    你的 unit_price 是字符串的吧,0.000 加个单引号
      

  8.   

    http://sql.1keydata.com/cn/sql-select.php
      

  9.   

    这样写的话,能取到有报价信息的客户名称.
    但客户ARROW无报价, 是不是不会出现在查询结果当中? 若是,则不符合查询结果哦.
      

  10.   

    select cust-code,cust-name,unit_price,reply_date from tb
    where REPLY_ID not in
    (
    select distinct(t1.REPLY_ID) from tb t1,tb t2 
    where 
    (
     t1.cust-name=t2.cust-name and t2.unit_price>0 and (t1.unit_price=0 or t1.unit_price is null)
    )
    or
    (
     t1.cust-name=t2.cust-name and t1.reply_date=t2.reply_date and t1.unit_price>t2.unit_price
    )
    or
    (
     t1.cust-name=t2.cust-name and t1.reply_date<t2.reply_date and t2.unit_price>0
    )
    )
    order by cust-name