产品库中有五个字段和若干记录(你甭管记录的真实性)
产品标识 产品名 竞价开始时间 竞价结束时间 竞价价格 更新时间
1 海尔电脑 2005-9-8 2005-9-18 10 2005-9-4
2 戴尔电脑 2005-9-14 2005-9-24 15 2005-9-5
3 方正电脑 2005-9-5 2005-9-10 8 2005-9-6
4 清华同方 2005-9-7 2005-9-17 11 2005-9-7
5 七喜电脑 0 2005-9-8
6 TCL电脑 0 2005-9-4
7 神舟电脑 0 2005-9-5
8 长城电脑 0 2005-9-9
9 联想电脑 0 2005-9-6
下面是我要的功能:
假定今天是2005-9-11日,以上产品的排名规则是这样的:
(1)若该产品有竞价,则以竞价的价格来排序(竞价的价格是以天来算的,如10,表示一天的竞价价格为10)
(2)若该产品有竞价,如果当前的日期落在竞价开始时间和竞价结束时间之间,则该条产品的今日竞价是有效的,否则该条竞价产品,当作没有竞价来处理.如上述记录中的第3条方正电脑产品,就已经是过期的竞价
(3)没有竞价的产品或者竞价产品排完之后,余下的则按更新时间来排序,更新时间越前的,排的越前.
以上功能,可不可以用一条SQL语句来实现?如果不能,怎么样来实现??请大侠们给个思路.谢谢了.有思路的,可加我MSN:[email protected].要报酬的,请来洽谈
产品标识 产品名 竞价开始时间 竞价结束时间 竞价价格 更新时间
1 海尔电脑 2005-9-8 2005-9-18 10 2005-9-4
2 戴尔电脑 2005-9-14 2005-9-24 15 2005-9-5
3 方正电脑 2005-9-5 2005-9-10 8 2005-9-6
4 清华同方 2005-9-7 2005-9-17 11 2005-9-7
5 七喜电脑 0 2005-9-8
6 TCL电脑 0 2005-9-4
7 神舟电脑 0 2005-9-5
8 长城电脑 0 2005-9-9
9 联想电脑 0 2005-9-6
下面是我要的功能:
假定今天是2005-9-11日,以上产品的排名规则是这样的:
(1)若该产品有竞价,则以竞价的价格来排序(竞价的价格是以天来算的,如10,表示一天的竞价价格为10)
(2)若该产品有竞价,如果当前的日期落在竞价开始时间和竞价结束时间之间,则该条产品的今日竞价是有效的,否则该条竞价产品,当作没有竞价来处理.如上述记录中的第3条方正电脑产品,就已经是过期的竞价
(3)没有竞价的产品或者竞价产品排完之后,余下的则按更新时间来排序,更新时间越前的,排的越前.
以上功能,可不可以用一条SQL语句来实现?如果不能,怎么样来实现??请大侠们给个思路.谢谢了.有思路的,可加我MSN:[email protected].要报酬的,请来洽谈
from t
order by case when date '2005-09-11' between pro_date1 and pro_date2 then pro_price*(pro_date2-pro_date1)
else 0 end desc,pro_uptime desc
select *
from tab_a
where 竞价价格>0
order by 竞价价格
)
union all
select * from
(
select * from tab_a
where 竞价价格>0 and 更新时间 between 竞价开始时间 and 竞价结束时间
order by 竞价价格
)
union all
select * from
(
select *
from tab_a
where nvl(竞价价格,0)=0
order by 更新时间 desc
)