我是新来的,所以希望能正确发布。
我有一个 PTC_CERT_PERIOD 表,并且想要获取表中每个 PATIENT_ID 的 Max PERIOD_NO。我可以通过让我的视图查看下面的另一个视图来做到这一点:
SELECT TOP (100) PERCENT
dbo.PTC_CERT_PERIOD.CERT_PERIOD_ID
, dbo.PTC_CERT_PERIOD.PATIENT_ID
, dbo.PTC_CERT_PERIOD.CERTIFICATION_DATE
, dbo.PTC_CERT_PERIOD.CERT_END_DATE
, dbo.PTC_CERT_PERIOD.PAY_SOURCE_POINTER
, dbo.PTC_CERT_PERIOD.IS_ACTIVE
, dbo.VW_SDH_CAS_MaxCertPeriod1.MaxCertPeriod
, dbo.PTC_CERT_PERIOD.CREATE_DATE
FROM
dbo.PTC_CERT_PERIOD
INNER JOIN dbo.VW_SDH_CAS_MaxCertPeriod1
ON dbo.PTC_CERT_PERIOD.PATIENT_ID = dbo.VW_SDH_CAS_MaxCertPeriod1.PATIENT_ID
AND dbo.PTC_CERT_PERIOD.PERIOD_NO = dbo.VW_SDH_CAS_MaxCertPeriod1.MaxCertPeriod
但在我看来,我应该能够编写一个子查询来做同样的事情,但我无法为子查询找到正确的语法。我已经尝试了几个小时,我最近失败的迭代是:
SELECT
CERT_PERIOD_ID
, PATIENT_ID
, CERTIFICATION_DATE
, CERT_END_DATE
, PAY_SOURCE_POINTER
, IS_ACTIVE
, CREATE_DATE
, PERIOD_NO
FROM
dbo.PTC_CERT_PERIOD
WHERE
(PERIOD_NO IN
(
SELECT
PATIENT_ID AS MaxPtID
, MAX(PERIOD_NO) AS MaxCertPeriod
FROM
dbo.PTC_CERT_PERIOD AS PTC_CERT_PERIOD_1
)
)
似乎我尝试的任何操作都会收到一条错误消息,例如“列 dbo.PTC-CERT_PERIOD.PATIENT_ID 在选择列表中无效,因为它不包含在聚合函数或 GROUP BY 子句中。只能在当子查询没有与 EXISTS 一起引入时的选择列表。我玩过几个 EXISTS statemsnts,如果他们运行结果很差,列出患者的所有 PERIOD_NO,而不仅仅是 Max。任何人都可以指出我正确的轨道上?