PostgreSQL在最后日期加入
我有两个表:(1)stock_purchase表包含股票买卖的历史记录;(2)股息表包含许多股票在较长时间内宣布的股息历史 我的目标:合并股票购买和股息表,如果在股息日持有股票,则添加股息条目 示例表: (1) 股票购买表:在不同日期买卖不同股票的两个账户PostgreSQL在最后日期加入,postgresql,join,Postgresql,Join,我有两个表:(1)stock_purchase表包含股票买卖的历史记录;(2)股息表包含许多股票在较长时间内宣布的股息历史 我的目标:合并股票购买和股息表,如果在股息日持有股票,则添加股息条目 示例表: (1) 股票购买表:在不同日期买卖不同股票的两个账户 account_name purchase_date ticker_symbol purchase_amount cum_shares_held john 02/27/2013 GOOG
account_name purchase_date ticker_symbol purchase_amount cum_shares_held
john 02/27/2013 GOOG 500 50
john 04/15/2013 GOOG -250 40
john 08/08/2013 GOOG 1000 150
john 03/01/2013 FB 750 20
john 04/15/2013 FB -500 5
john 09/15/2013 FB 1500 50
bill 02/21/2013 GOOG 500 55
bill 04/12/2013 GOOG -250 43
bill 08/29/2013 GOOG 1000 161
bill 03/17/2013 FB 750 19
bill 04/12/2013 FB -500 7
bill 09/27/2013 FB 1500 57
现在我们有谷歌和FB的股息历史记录表。股息按季度宣布
ticker_symbol dividend_date dividend_amount_per_share
goog 12/31/2012 .04
goog 03/31/2013 .04
goog 06/30/2013 .03
goog 09/30/2013 .09
goog 12/31/2013 .05
goog 03/31/2014 .04
goog 06/30/2014 .03
fb 12/31/2012 .44
fb 03/31/2013 .19
fb 06/30/2013 .23
fb 09/30/2013 .25
fb 12/31/2013 .39
fb 03/30/2014 .99
fb 06/30/2014 .79
我尝试了几种左/外连接组合以及插入,但结果不是我想要的
至少,如果我能在股票表中获得额外的股息记录,那将是一个良好的开端。
下一个最好的选择是:只有那些在我第一次/最后一次购买日期内的股息记录
有什么想法或想法吗?感谢你的时间和努力
选择不同日期(账户名称、股票代码、分红日期)
账户名称作为账户,
sp.ticker_符号作为股票代码,
共有股份,
分红日,
每股股息金额作为每股股息,
每股股息金额*作为股息持有的合计股份总数
从…起
股票购买
内连接
股息(历史数据)
下(sp.ticker\U symbol)=dh.ticker\U symbol
和
sp.purchase\u date这些数据的预期结果是什么?
select distinct on (account_name, sp.ticker_symbol, dividend_date)
account_name as account,
sp.ticker_symbol as ticker,
cum_shares_held,
dividend_date,
dividend_amount_per_share as dividend_per_share,
dividend_amount_per_share * cum_shares_held as dividend_total
from
stock_purchase sp
inner join
dividend_history dh on
lower(sp.ticker_symbol) = dh.ticker_symbol
and
sp.purchase_date <= dh.dividend_date
order by account_name, sp.ticker_symbol, dividend_date, purchase_date desc
;
account | ticker | cum_shares_held | dividend_date | dividend_per_share | dividend_total
---------+--------+-----------------+---------------+--------------------+----------------
bill | FB | 19 | 2013-03-31 | 0.19 | 3.61
bill | FB | 7 | 2013-06-30 | 0.23 | 1.61
bill | FB | 57 | 2013-09-30 | 0.25 | 14.25
bill | FB | 57 | 2013-12-31 | 0.39 | 22.23
bill | FB | 57 | 2014-03-30 | 0.99 | 56.43
bill | FB | 57 | 2014-06-30 | 0.79 | 45.03
bill | GOOG | 55 | 2013-03-31 | 0.04 | 2.20
bill | GOOG | 43 | 2013-06-30 | 0.03 | 1.29
bill | GOOG | 161 | 2013-09-30 | 0.09 | 14.49
bill | GOOG | 161 | 2013-12-31 | 0.05 | 8.05
bill | GOOG | 161 | 2014-03-31 | 0.04 | 6.44
bill | GOOG | 161 | 2014-06-30 | 0.03 | 4.83
john | FB | 20 | 2013-03-31 | 0.19 | 3.80
john | FB | 5 | 2013-06-30 | 0.23 | 1.15
john | FB | 50 | 2013-09-30 | 0.25 | 12.50
john | FB | 50 | 2013-12-31 | 0.39 | 19.50
john | FB | 50 | 2014-03-30 | 0.99 | 49.50
john | FB | 50 | 2014-06-30 | 0.79 | 39.50
john | GOOG | 50 | 2013-03-31 | 0.04 | 2.00
john | GOOG | 40 | 2013-06-30 | 0.03 | 1.20
john | GOOG | 150 | 2013-09-30 | 0.09 | 13.50
john | GOOG | 150 | 2013-12-31 | 0.05 | 7.50
john | GOOG | 150 | 2014-03-31 | 0.04 | 6.00
john | GOOG | 150 | 2014-06-30 | 0.03 | 4.50