【问题标题】:how to perform date calculations from different tables?如何从不同的表执行日期计算?
【发布时间】:2016-10-29 19:35:24
【问题描述】:

如果这是一个基本问题,请原谅我,我是 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

冠心病

    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年有多少CHD患者死亡,如果他们死了12个月过去了?

我不确定如何执行此操作,但我知道 ID 上需要连接,我们将 where 条件设置为 alive 为 NOT 'Y'

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

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

有任何问题请告诉我!

编辑:为了清楚起见,患者可以在患者表中多次出现直到他们死亡。

谢谢

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    假设此查询从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'
    

    【讨论】:

    • 我能问一下你为什么使用 min(p.date) 吗?每个病人在不同的日期死亡,所以不知道为什么我们需要分钟。另外,我们不检查从今天的日期是否已经过了 1 年,我们需要检查日期(患者表)和索引日期(chd 表)之间的差异是否 > 1 年。感谢您的帮助!
    • @lo_iQ 。 . .您的问题不清楚患者是否可以在表格中多次出现。在我看来,如果您有一个患者状态(“活着”、“不活着”),那么对于给定的患者,您的表中可能会有多行。
    • 是的,它们出现了多次。一旦他们死了,他们将不再出现。
    • 知道我如何做到这一点,即使它们出现多次?
    • 请您解释一下这个查询。它适用于多个患者吗?如果我将 min(p.date) 删除到 p.date 是否会将死亡日期与 indexdate 进行比较?很抱歉很烦人,但想了解它是如何工作的,以及它是否能给我带来我期望的结果
    猜你喜欢
    • 1970-01-01
    • 2016-09-17
    • 2012-01-09
    • 1970-01-01
    • 2020-09-17
    • 2020-05-31
    • 2015-09-13
    • 2012-11-09
    • 1970-01-01
    相关资源
    最近更新 更多