【问题标题】:SQL date calculationsSQL 日期计算
【发布时间】:2016-10-28 10:20:54
【问题描述】:

在进行 SQL 日期计算时需要一些帮助:

在一张表中,我有超过 18 岁并死于某种疾病的患者(表 a)。在另一个表中,我有患有相同疾病的患者以及他们被诊断出患有这种疾病的最早日期(表 b)。

我需要知道的是,从他们被诊断到死亡时间是否已经过去了 12 个月。

有人可以帮我计算这个日期吗?

表 a 中的列是 indexdate,表 b 中的列是死亡日期,表示他们死亡的时间。

感谢任何帮助

表 A:

patientid--age--deathdate
1          20   11/05/2016
2          19   10/09/2015

表 B:

PatientID--indexdate
1          01/02/2015
2          08/03/2014

所以基本上我只想检查 indexdate 和 deathdate 之间是否已经过了 12 个月。

【问题讨论】:

  • 我不确定你想要什么..你能像你的桌子一样张贴吗?
  • 您能否提供表定义和示例查询 --- 可能不完整 --- 表明您想要获得什么。对于一个病人?对于单一疾病?如何确定诊断?等等等等。
  • 已经展示了示例表结构和我所追求的

标签: sql postgresql


【解决方案1】:

这给出了自诊断以来已过去 12 个月以及何时死亡的患者列表。

SELECT A.patientID, A.patientName

FROM tableA A
INNER JOIN
(
SELECT patientID , MIN(DiagnoseDate) As EarliestDate
FROM tableB
GROUP BY patientID
) As B

ON A.patientID = B.patientID
WHERE  date_part('month',age(EarliestDate, DeathDate)) >=12

【讨论】:

  • 会试一试。因为它说 >=12,我假设它也会为那些在 12 个月前死亡的人提供结果?
  • 不,这给出了他们死亡日期和最早诊断日期差为 12 个月的患者名单
  • 如果我想要 12 个月或更长时间呢?
【解决方案2】:

您应该能够通过编写一个通过患者 ID 链接 2 个表的查询来做到这一点,然后在 where 子句中使用 dateadd 函数,类似于以下示例:

WHERE TableA.deathdate > (DATEADD(month, 12, TableB.indexdate))

【讨论】:

猜你喜欢
  • 2015-05-08
  • 1970-01-01
  • 2021-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多