0
我有一张表,其中包含某些日期的股票及其权重列表。我想要做的是在两个不同的日期选择属于投资组合的股票,并比较权重。下面简单的例子,比较同一表中的记录并计算不同日期的差异
Date 1st March 2015 Date 1st May 2015
Stock Name Weight Stock Name Weight
ABC 20 MNO 30
DEF 15 XYZ 25
MNO 40 LMN 30
LMN 25 PPP 10
KLM 5
ABC 20
结果我想
Stock Name Weight Change
ABC 0
DEF -15
MNO -10
LMN 5
PPP 10
KLM 5
XYZ 25
这是我到目前为止这是不是很接近我所需要的!
with t0 as
(select * from PORT_WGT
and port_name = 'My Port'
and wgt <> 0
and pricedate = '2015-01-02'),
t1 as
(select * from PORT_WGT
where counterparty = 'JPM'
and port_name = 'My Port'
and wgt <> 0
and pricedate = '2015-01-30')
select * from t0 union all
select * from t1
更新
刚刚意识到我是使用了错误类型的连接,请参阅我的更新查询。我只需要计算权重
with t0 as
(select * from PORT_WGT
where port_name = 'My Port'
and wgt <> 0
and pricedate = '2015-01-02'),
t1 as
(select * from PORT_WGT
where port_name = 'My Port'
and wgt <> 0
and pricedate = '2015-01-30')
select coalesce(t0.sedol, t1.sedol), coalesce(t0.co_name, t1.co_name) from t0 full outer join t1 on t0.sedolchk = t1.sedolchk
对不起Giorgos我刚才意识到,上面的查询确实可行,但每行都会出现两次。你知道如何解决这个问题吗? – mHelpMe
@mHelpMe那么,您提供的示例数据所涉及的问题是不可重现的。您还可以检查我所做的编辑,提供替代解决方案。你能设置一个sqlfiddle来证明这个问题吗? –
你的权利它确实与我的简单示例一起工作,而不是与我的实际数据。需要考虑导致行被复制的原因 – mHelpMe