我相信这很容易实现,但经过一整天的努力,我不得不放弃并寻求你的帮助。
我有一张看起来像这样的桌子
| PatientID | VisitId | DateOfVisit | FollowUp(Y/N) | FollowUpWks |
----------------------------------------------------------------------
| 123456789 | 2222222 | 20180802 | Y | 2 |
| 123456789 | 3333333 | 20180902 | Y | 4 |
| 234453656 | 4443232 | 20180506 | N | NULL |
| 455344243 | 2446364 | 20180618 | Y | 12 |
----------------------------------------------------------------------
基本上我有一个PatientID列表,每个病人可以有多次访问(VisitID和DateOfVisit)。 FollowUp(Y / N)指定是否需要再次观察患者以及需要多长时间(FollowUpWks)。
现在,我需要的是一个查询,它提取PatientsID,DateOfVisit(最新的,仅当FollowUp为YES时)和FollowUpWks字段。
最终结果应如下所示
| PatientID | VisitId | DateOfVisit | FollowUp(Y/N) | FollowUpWks |
----------------------------------------------------------------------
| 123456789 | 3333333 | 20180902 | Y | 4 |
| 455344243 | 2446364 | 20180618 | Y | 12 |
----------------------------------------------------------------------
我能得到的最接近的是这段代码
SELECT PatientID,
Max(DateOfVisit) AS LastVisit
FROM mytable
WHERE FollowUp = True
GROUP BY PatientID;
问题是,当我尝试将FollowUpWks字段添加到SELECT时,我收到以下错误:“查询不包括指定的表达式作为聚合函数的一部分。”但是,如果我将FollowUpWks添加到GROUP BY语句而不是所有访问,而不仅仅是最新的访问。
您需要回溯到最近的访问。一种方法使用相关子查询:
SELECT t.*
FROM mytable as t
WHERE t.FollowUp = True AND
t.DateOfVisit = (SELECT MAX(t2.DateOfVisit)
FROM mytable as t2
WHERE t2.PatientID = t.PatientID
);