如何从不同的表执行日期计算?

时间:2016-10-29 19:35:24

标签: sql postgresql

如果这是一个基本问题,请原谅我,我是SQL的初学者,需要一些帮助从SQL中的2个表执行日期计算。

我有两张桌子(病人和chd)他们看起来像这样:

病人

ID|Age|date         |Alive
--------------------------
1  50  01/09/2013      Y
2  52  11/05/2015      N
3  19  20/07/2016      N

CHD

    ID|Age|indexdate        
    --------------------
    1  50  01/08/2012    
    2  52  11/11/2013    
    3  19  10/07/2015    

患者表包含2010-2016的约500,000条记录,CHD表包含2012 - 2013年的约350,000条记录。我想做的是看看2012 - 2016年有多少冠心病患者死亡,如果他们已经死了12个月就过去了?

我不知道该怎么做但我知道ID上需要加入,我们将where条件设置为alive而不是'Y'

根据上面的示例,最终输出应如下所示:

ID|Age|indexdate| deathdate
---------------------------
2  52  11/11/2013 11/05/2015
3  19  10/07/2016 20/07/2016

有任何问题让我知道!

编辑:只是为了说清楚,患者可以在患者台上多次出现,直到他们死亡。

由于

1 个答案:

答案 0 :(得分:0)

我假设此查询从patient表中获取死亡日期:

select p.id, min(p.date) as deathdate
from patient p
where p.Alive = 'N'
group by p.id;

然后,您可以通过加入获得所需内容:

select count(*)
from chd c join
     (select p.id, min(p.date) as deathdate
      from patient p
      where p.Alive = 'N'
      group by p.id
     ) pd
     on c.id = pd.id;

然后,您可以使用外部查询中的where子句来解决您的问题。例如:

where deathdate >= current_date - interval '1 year'