有以下表的数据:
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在线等待答案. 多谢!
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在线等待答案. 多谢!
BBBC ARROW 06/11/2008 NO QUOTE
没看明白规律
这里为什么要取第二条?
from tb
where
REPLY_ID in(select max(REPLY_ID) from tb group by cust-name)
若该表再更新一条记录
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 语句查询是错误的。
即: 若客户AVNET 在06/09/2008 报了 0.158,而在06/11/2008 开始报了0.305,接着在这一天又报了0.425. 那么我门取0.305的报价.
若客户FUTURE 在整个过程中都无报价但有REMARKS, 则在查询结果中出现最后一条回复报价的记录信息.
若客户ARROW 在整个过程中无报价无REMARKS, 则在查询结果中不出现该客户记录.谢谢!
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
但客户ARROW无报价, 是不是不会出现在查询结果当中? 若是,则不符合查询结果哦.
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