我有两张桌子。
首先是访问医院的病人表。每次访问都有一个由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方式?
由于