2011-10-04 106 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 
相關問題