我有两组定价数据(A和B)。套餐A包含一个月内每个订单的所有定价数据。 B组包含我在同一个月的所有竞争对手的定价数据。我想将竞争对手的最低价格与每天的每个价格进行比较。
从图形上看,数据如下所示:
日期: - 设置A: - 设置B:
1 --------- --------- 25 31
1 --------- --------- 54 47
1 --------- --------- 23 56
1 --------- --------- 12 23
1 --------- --------- 76 40
1 --------- 42
我希望只将最低价格传递给案例陈述,以评估哪些价格更好。我想一次处理一个月的整个数据,所以在我的例子中,日期1到30(1)将被包括在内并且同时被打破,并且对于每一天,只有一个值来自集合B包括:套装中的最低价格。
重要说明:Set B没有Set A
中每个点的数据点希望这是有道理的。提前感谢您提供的任何帮助。
答案 0 :(得分: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
答案 1 :(得分: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