aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sql/dawn.sql37
1 files changed, 19 insertions, 18 deletions
diff --git a/sql/dawn.sql b/sql/dawn.sql
index 8c76d5df..76652034 100644
--- a/sql/dawn.sql
+++ b/sql/dawn.sql
@@ -51,16 +51,10 @@ CREATE TABLE bonds(id serial primary key,
asset_class asset_class,
ticket text);
-
CREATE TABLE position(date date,
- isin varchar(12),
- cusip varchar(9),
- identifier varchar(12),
- description varchar(32),
+ identifier varchar(12) REFERENCES position_indicative(identifier)
notional float,
- face_amount float,
coupon float,
- currency currency,
factor float,
price float,
market_value_local float,
@@ -71,27 +65,34 @@ CREATE TABLE position(date date,
factor_pay_date date,
paydown float,
writedown float,
- bbg_type bbg_type,
- strategy bond_strat,
- asset_class asset_class,
- presettle_principal float,
- presettle_interest float,
- settle_date date,
+ unsettled_principal float,
+ unsettled_interest float,
PRIMARY KEY(identifier, date));
+CREATE TABLE position_indicative(identifier varchar(12) PRIMARY KEY,
+ cusip varchar(9),
+ isin varchar(12),
+ description varchar(32),
+ face_amount float,
+ currency currency default 'USD',
+ bbg_type bbg_type default 'Mtge',
+ asset_class asset_class,
+ paid_down date default 'Infinity')
+
CREATE OR REPLACE function list_positions(p_date date, p_class asset_class DEFAULT NULL)
RETURNS TABLE(identifier varchar(12), description varchar(32), strategy bond_strat,
- last_settle_date date, notional float) AS $$
+ last_settle_date date, notional float, bbg_type bbg_type) AS $$
DECLARE sqlquery text;
BEGIN
sqlquery := 'WITH temp as (SELECT bonds.identifier, bonds.description, asset_class, settle_date, folder,
sum(faceamount*(2*buysell::int-1))
OVER (PARTITION by bonds.identifier) from bonds where trade_date<=$1)
- SELECT DISTINCT ON (temp.identifier) temp.identifier, temp.description, folder, settle_date, sum AS notional
- FROM temp
- WHERE (sum>0 or settle_date>=$1)';
+ SELECT DISTINCT ON (temp.identifier) temp.identifier, temp.description, folder, settle_date, sum AS notional,
+ position_indicative.bbg_type
+ FROM temp LEFT JOIN position_indicative USING (identifier)
+ WHERE (sum>0 or settle_date<=$1) and paid_down>$1 ';
IF p_class is not NULL THEN
- sqlquery := sqlquery || 'and asset_class=$2';
+ sqlquery := sqlquery || 'and position_indicative.asset_class=$2 ';
END IF;
sqlquery := sqlquery || 'order by identifier, settle_date';
RETURN QUERY EXECUTE sqlquery