1
背景:さまざまな量の材料の価格を設定するために頻繁に更新される範囲があります。一定のクォータが満たされると、価格が下げられます。問題は、範囲が更新または追加された後の現在の価格を特定することです。オーバーラップしない範囲へのフィルタリング - Amazon RedShift
データセットから非連続範囲を除外することを検討しています。ここではいくつかのテストコードは次のとおりです。
drop table if exists public.test_ranges;
create table public.test_ranges (
category integer
,lower_bound integer
,upper_bound integer
,cost numeric(10,2)
,modifieddate timestamp
);
insert into public.test_ranges values (1,0,70456,0,'2015-09-29');
insert into public.test_ranges values (1,53956,60000,1.28,'2015-02-11');
insert into public.test_ranges values (1,70456,90000,1.02,'2015-09-29');
insert into public.test_ranges values (1,90000,120000,0.88,'2015-02-11');
insert into public.test_ranges values (1,120000,999999999,0.79,'2015-02-11');
insert into public.test_ranges values (2,0,48786,0,'2015-11-02');
insert into public.test_ranges values (2,22500,25000,0.43,'2015-02-17');
insert into public.test_ranges values (2,48786,50000,0.37,'2015-11-02');
insert into public.test_ranges values (2,50000,100000,0.21,'2015-02-17');
insert into public.test_ranges values (2,100000,175000,0.19,'2015-02-17');
insert into public.test_ranges values (2,175000,999999999,0.17,'2015-02-17');
insert into public.test_ranges values (3,0,585969,0,'2015-11-02');
insert into public.test_ranges values (3,346667,375000,0.15,'2014-09-12');
insert into public.test_ranges values (3,375000,500000,0.14,'2014-09-12');
insert into public.test_ranges values (3,500000,600000,0.13,'2014-09-12');
insert into public.test_ranges values (3,585969,999999999,0.02,'2015-11-02');
insert into public.test_ranges values (3,600000,670000,0.12,'2014-09-12');
select * from public.test_ranges order by 1,2;
このコードが返す:
category lower_bound upper_bound cost modifieddate
--------------------------------------------------
1 0 70456 0 2015-09-29
1 53956 60000 1.28 2015-02-11
1 70456 90000 1.02 2015-09-29
1 90000 120000 0.88 2015-02-11
1 120000 999999999 0.79 2015-02-11
2 0 48786 0 2015-11-02
2 22500 25000 0.43 2015-02-17
2 48786 50000 0.37 2015-11-02
2 50000 100000 0.21 2015-02-17
2 100000 175000 0.19 2015-02-17
2 175000 999999999 0.17 2015-02-17
3 0 585969 0.00 2015-11-02
3 346667 375000 0.15 2014-09-12
3 375000 500000 0.14 2014-09-12
3 500000 600000 0.13 2014-09-12
3 585969 999999999 0.02 2015-11-02
3 600000 670000 0.12 2014-09-12
希望する結果:任意の助けを事前に
category lower_bound upper_bound cost modifieddate
--------------------------------------------------
1 0 70456 0 2015-09-29
1 70456 90000 1.02 2015-09-29
1 90000 120000 0.88 2015-02-11
1 120000 999999999 0.79 2015-02-11
2 0 48786 0 2015-11-02
2 48786 50000 0.37 2015-11-02
2 50000 100000 0.21 2015-02-17
2 100000 175000 0.19 2015-02-17
2 175000 999999999 0.17 2015-02-17
3 0 585969 0.00 2015-11-02
3 585969 999999999 0.02 2015-11-02
感謝。
赤方偏移かのPostgres:
部分的な解決策は、(あなたにカテゴリ3のために正しい結果を与えることはありませんか)? –
レッドシフト........ – Josh
要件を明確にしてください。他の行に完全に含まれている行を表示しないでください。行間に部分的な重なりがある場合(たとえば1-10と5-15)にはどうなりますか?さらに、upper_boundの値が範囲に含まれていないと仮定します(「以下」ではなく「未満」)。 –