带条件的SQL分组

带条件的SQL分组,sql,ms-access-2010,Sql,Ms Access 2010,我相信这是很容易做到的,但在花了一整天的时间尝试之后,我不得不放弃并寻求你的帮助 我有一张像这样的桌子 | PatientID | VisitId | DateOfVisit | FollowUp(Y/N) | FollowUpWks | ---------------------------------------------------------------------- | 123456789 | 2222222 | 20180802 | Y |

我相信这是很容易做到的,但在花了一整天的时间尝试之后,我不得不放弃并寻求你的帮助

我有一张像这样的桌子

| 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 |
----------------------------------------------------------------------
| 123456789  | 3333333  |  20180902    |     Y         |     4       |
| 455344243  | 2446364  |  20180618    |     Y         |    12       |
----------------------------------------------------------------------
基本上我有一个PatientID列表,每个患者可以有多次就诊(VisitID和DateOfVisit)。随访(Y/N)指定患者是否需要再次就诊以及在几周内就诊(随访)

现在,我需要的是一个查询,它提取PatientsID、DateOfVisit(最近的一个,并且仅当FollowUp为YES时)和FollowUpWks字段

最终结果应该是这样的

| 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 |
----------------------------------------------------------------------
| 123456789  | 3333333  |  20180902    |     Y         |     4       |
| 455344243  | 2446364  |  20180618    |     Y         |    12       |
----------------------------------------------------------------------
我能得到的最接近的是这个代码

SELECT PatientID,
       Max(DateOfVisit) AS LastVisit
FROM mytable
WHERE FollowUp = True
GROUP BY PatientID;

问题是,当我尝试将followUpks字段添加到SELECT时,会出现以下错误:“查询不包括作为聚合函数一部分的指定表达式。”但是,如果我将followUpks添加到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
                      );