Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PostgreSQL在最后日期加入_Postgresql_Join - Fatal编程技术网

PostgreSQL在最后日期加入

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

我有两个表:(1)stock_purchase表包含股票买卖的历史记录;(2)股息表包含许多股票在较长时间内宣布的股息历史

我的目标:合并股票购买和股息表,如果在股息日持有股票,则添加股息条目

示例表: (1) 股票购买表:在不同日期买卖不同股票的两个账户

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