2011-10-04 124 views
-1

我有两组定价数据(A和B)。套餐A包含一个月内每笔订单的所有定价数据。 B组包含同月份所有竞争对手的价格数据。我想比较我竞争对手的最低价格和每天的每个价格。查询一个月内数据的每日最小值

图形时,出现这样的数据:

日期: - 设置一个: - 设置B:
1 --------- --------- 25 31
1 --------- 54 --------- 47
1 --------- 23 --------- 56
1 --------- 12 --------- 23
1 --------- 76 --------- 40
1 ---- ----- 42

我只想把最低的价格传递给case语句来评估哪些价格更好。我想一次处理整个月的所有数据,所以在我的例子中,日期1到30(1)将被包括在内,并且一次性完成,每天只有一组数据B包括:集合中的最低价格。

重要提示:B组没有一个数据点在设定每个点

希望这是有道理的。预先感谢您可能能够呈现的任何帮助。

+0

你正在使用的模式(表和列)是什么样的? –

+0

@ sleona1 - 我不确定我是否理解你的图形。您有多个具有相同'DATE'的行。数据中是否有附加的'PRODUCT_ID'列,以便您的示例代表同一日期的6种不同产品的价格?或者您是否在同一天有同一产品的多个价格?如果B在当月的第一天没有价格,您是否需要从前一个月的末尾找到价格?你想要的输出是什么?对于'SET B',你想在每行中的'DATE'和'SET A'列中使用与样本输入相同的值'23'的6行吗? –

+0

他们只是价格,还是属于某种产品?如果只是价格,你每天只能有一个最低的价格,对吧? – GolezTrol

回答

1

这是一个很奇怪的例子 - 你真的在一天内有12到76的价格吗?

反正离开他们(分组)的数据加入您的(分组)的数据应该工作(未经测试):

with 
    my_prices as (
    select price_date, min(price_value) min_price from my_prices group by price_date), 
    their_prices as (
    select price_date, min(price_value) min_price from their_prices group by price_date) 
select 
    mine.price_date, 
    (case 
    when theirs.min_price is null then mine.min_price 
    when theirs.min_price >= mine.min_price then mine.min_price 
    else theirs.min_price 
    end) min_price 
from 
    my_min_prices mine 
left join their_prices theirs on mine.price_date = theirs.price_date 
+0

+1为了解这个问题。 – GolezTrol

0

我仍然不知道我理解您的需求。我最好的猜测是你想要类似于

SQL> ed 
Wrote file afiedt.buf 

    1 with your_data as (
    2  select 1 date_id, 25 price_a,31 price_b from dual 
    3  union all 
    4  select 1, 54, 47 from dual union all 
    5  select 1, 23, 56 from dual union all 
    6  select 1, 12, 23 from dual union all 
    7  select 1, 76, 40 from dual union all 
    8  select 1, 42, null from dual) 
    9 select date_id, 
10   sum(case when price_a < min_price_b 
11     then 1 
12     else 0 
13    end) better, 
14   sum(case when price_a = min_price_b 
15     then 1 
16     else 0 
17    end) tie, 
18   sum(case when price_a > min_price_b 
19     then 1 
20     else 0 
21    end) worse 
22 from(select date_id, 
23     price_a, 
24     min(price_b) over (partition by date_id) min_price_b 
25   from your_data) 
26* group by date_id 
SQL>/

    DATE_ID  BETTER  TIE  WORSE 
---------- ---------- ---------- ---------- 
     1   1   1   4 
相关问题