只有顶尖的select 高手才能回答的问题。

tante呃呃 2001-07-27 05:47:26
有如下表
ITEM_NO ITEM_TYPE SDATE EDATE PRICE
A 1 2001-01-01 100
A 1 2001-05-01 2001-09-01 50
A 2 2001-01-01 30
B 1 2001-01-09 2001-07-01 80
B 1 2001-07-02 60

说明:若edate为空,则表示此价格未定价格执行终止日期。
根据任意的当前日期计算某类(item_no and item_type)的当日执行价格。
如今天为2001-07-01则输出为:
A 1 50
A 2 30
B 1 80
如今天为2001-10-01则输出为:
A 1 100
A 2 30
B 1 60

只用一sql语句怎么实现?
...全文
63 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jixian 2001-07-27
  • 打赏
  • 举报
回复
@_@
huanggx 2001-07-27
  • 打赏
  • 举报
回复
你没给出选择的明确规则,别人无法想当然
tante呃呃 2001-07-27
  • 打赏
  • 举报
回复
要求,只返回一条数据
假若表中数据如下:
item_sn item_type sdate edate price
A 1 2001-01-01 2001-10-01 100
A 1 2001-05-01 2001-09-01 80
你的语句是不对的。
huanggx 2001-07-27
  • 打赏
  • 举报
回复
如果EDATE不是日期字段,是字符串,也同样可以用ISNULL来处理。
huanggx 2001-07-27
  • 打赏
  • 举报
回复
SELECT ITEM_NO,ITEM_TYPE, PRICE
FROM TABLE
WHERE varTODAY>=SDATE AND varTODAY<=ISNULL(EDATE, varTODAY)

其中,varTODAY是当天的日期变量。
ISNULL函数的作用是:如果第一个参数为NULL,则返回第二个参数,否则返回第一个参数。
因此,使用这个函数是有条件的:EDATE要么为有效日期,要么为NULL

7,759

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧