from IPython.display import HTML
HTML('')
HTML('')
HTML('')
HTML('')
%%script psql -d tmc -U norman
\d price
%load_ext sql
%sql postgresql://norman@localhost/tmc
cid=432
%%script psql -d tmc -U norman
\sf+ price_block_update_or_delete_or_truncate
%%script psql -d tmc -U norman
update price
set settle = 2
where cid = 432
and dte = '2013-12-02';
delete from price
where cid = 432
and dte = '2013-12-02';
truncate table price;
%%sql
SELECT min(date_entered),max(date_entered),count(*)
FROM price
WHERE cid = :cid
AND dte = '2013-12-13'
%%sql
select *
from price
where cid = :cid
and dte = '2013-12-13'
order by date_entered desc
limit 10
%%sql
-- Get price for Dec 13 2013 as of 12:30 pm Dec 31st
select distinct on (cid,dte) cid,dte,date_entered, settle
from price
where cid = :cid
and dte = '2013-12-13'
and date_entered <= '2013-12-31 12:30:00'
order by 1,2,3 desc
%%sql
-- Get price for Dec 13 2013 as of 12:45 pm Dec 31st
select distinct on (cid,dte) cid,dte,date_entered, settle
from price
where cid = :cid
and dte = '2013-12-13'
and date_entered <= '2013-12-31 12:45:00'
order by 1,2,3 desc
%%sql
-- or we can use windowing example
select distinct cid,dte,
first_value(date_entered) over date_window as date_entered,
first_value(settle) over date_window as settle
FROM price
where cid = :cid
and dte = '2013-12-13'
and date_entered <= '2013-12-31 12:45:00'
window date_window as
(partition by cid, dte
order by cid, dte, date_entered desc
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
order by 1,2,3 desc;
%%script psql -d tmc -U norman
-- create extension btree_gist ;
-- need this to mix btree with gist
\d price_range
%%script psql -d tmc -U norman
-- insert into price_range
-- (cid,dte,settle,date_range)
-- select cid,dte,settle,
-- tstzrange(date_entered,lead(date_entered)
-- over (partition by cid,dte order by cid,dte,date_entered)
-- ) as date_range
-- from price
-- order by cid,dte,date_entered;
select *
from price_range
where cid = 432
and dte = '2013-12-13'
order by date_range desc limit 10;
%%sql
select cid,dte, round(settle,2) as settle
from price_range
where cid = :cid
and dte between '2010-12-01' and '2010-12-13'
-- now is within date_range
and current_timestamp <@ date_range
order by 2
HTML('')
%%script psql -d tmc -U norman
-- create schema partman;
-- create extension pg_partman schema partman;
-- set search_path to public,partman;
-- create table price_parent(like price including constraints including defaults including indexes)
-- create partition based index please...
-- create index price_parent_dte on price_parent(dte);
-- select partman.create_parent(p_parent_table:='public.price_parent', p_control:='dte',
-- p_type:='time-dynamic',p_interval:='yearly',p_start_partition:='2009-01-01 00:00:00');
\sf+ price_parent_part_trig_func
%%script psql -d tmc -U norman
\d price_parent_p2009
%%sql
explain analyze
select distinct on (cid, dte) cid, dte, date_entered,settle
FROM price_parent
where cid = :cid
and dte between '2014-02-01' and '2014-03-30'
and date_entered < current_timestamp
ORDER BY 1,2,3 desc
HTML('')