按过去时间范围查找汇总计数

时间:2015-11-23 22:10:18

标签: sql postgresql

我有两张桌子。

首先是访问医院的病人表。每次访问都有一个由VisitId给出的唯一ID。每个患者由ID唯一标识。以下是表格中的示例记录的表格。

 ID VisitID VisitTime
1   A   7/5/12 6:21
2   B   7/5/12 6:21
1   C   10/28/13 12:30
2   D   1/8/11 12:07
3   E   7/5/12 6:21

这里的身份证是一个问题。 VisitID是医院访问ID,访问时间是访问时间。患者可以是多次访问的一部分,因此对于不同的VisitID也将存在相同的ID。但是,VisitID在整个表中是唯一的,每个visitID有一条记录。

现在还有另一张桌子可以在医院里保留患者用药时间表。

  MedicationID  VisitID MedicationTIme
1   A   7/4/12 12:30
2   A   7/5/12 6:21
2   A   10/8/11 12:07
3   A   10/28/10 12:30
1   B   7/5/12 6:21
3   B   10/28/13 12:30
3   C   5/5/13 6:21
2   C   7/5/12 6:21
1   C   1/8/11 12:07

这里每种药物都由药物识别。对于每次访问,所有药物已经分配给患者,我们每个记录都有相同的记录。因此,可以重复该表中的每个VisitID,因为在同一次访问中给予患者不同的药物。这里的时间是用药时间。

现在我想要的是在第一张桌子中,我有患者(ID)和VistiID的独特组合,在当前访问前6个月,当前访问前12个月给予患者的药物计数等等。基本上,由于第一个表中的每个记录对应于医院中患者的访问,我希望将所有这些变量添加到对应于每个记录的第一个表中,告诉我对于当前访问,该患者具有x否。在过去6个月/ 12个月的药物治疗等访问医院。所以最后我会有同样的不。作为第一个表的行添加了一些额外的列。

请注意,第一张表可以重复多个ID,因为一名患者可能是多次访问医院的一部分。我们想要ID + VisitID的特定组合,那是患者在访问之前的药物数量(由visitID和Visittime给出)。

输出:

请注意,例如visitID' A',我们看到patientID为1.此过去的患者也访问过visitID' C'。因此,药物表中的总记录对应于VisitID' A'和' C'将计算药物治疗时间小于组合患者ID = 1和访问ID =' A'的访问时间。其他记录也是如此

ID  VisitID VisitTime   Totalmedication_6mnth   Totalmedication6-12mnth Totalmedication_all
1   A   7/5/12 6:21 1   2   4
2   B   7/5/12 6:21 0   0   0
1   C   10/28/13 12:30  1   0   7
2   D   1/8/11 12:07    0   0   0
3   E   7/5/12 6:21 0   0   0

我已经做了一些事情,但看起来有一些关于where子句的错误。

这可以在普通的sql中完成而不使用postgres的windows函数吗?或者有人可以提出两种解决方案吗?窗口函数和普通的sql方式?

由于

0 个答案:

没有答案