我的数据集包含来自不同行业的不同公司的每日(实际工作日)时间序列,我使用PostgreSQL。我的数据集中有一个指标变量,取值为1,-1,大部分时间为0.为了更好的可读性,我指的是指标变量对于给定公司作为指标事件不等于零的情况。 p>
如果给定行业在某一天有多个指标事件,则尊重公司的指标变量应更新为0.
我们可以想到以下示例数据集:
day company indicator industry
2012-01-12 A 1 financial
2012-01-12 B 1 consumer
2012-01-12 C 0 consumer
2012-01-13 A 0 financial
2012-01-13 B 1 consumer
2012-01-13 C 0 consumer
2012-01-16 A 1 financial
2012-01-16 B -1 consumer
2012-01-16 C 1 consumer
因此,应该更新为零的指标值是2012-01-16公司B和C的条目,因为它们都来自同一行业并且在同一天经历了指标事件。
我的想法是使用exists运算符:
update mytable t1 set indicator = 0
where exists (
select 1
from mytable t2
where t2.day = t1.day
and t2.industry = t1.industry
and t2.indicator <> 0
and t1.indicator <> 0)
但不知何故,将所有指标值更新为0,我无法弄清楚原因。
您是否有任何想法如何解决这个问题,或者如何用其他方法解决我的问题?
答案 0 :(得分:1)
您可能希望添加一个条件,以便不将行连接到自身(这将始终为真),例如。
update mytable t1 set indicator = 0
where exists (
select 1
from mytable t2
where t2.day = t1.day
and t1.company <> t2.company
and t2.industry = t1.industry
and t2.indicator <> 0
and t1.indicator <> 0)