Sql 如何在一个表的子选择中使用max函数

Sql 如何在一个表的子选择中使用max函数,sql,max,Sql,Max,我在医疗保险登记数据库中有一个查询,用于填充cred cov请求的数量。但是,我需要lastupd_TS字段仅过滤最大值。当我这样做时,我会得到一个错误: 除非是在一个集合中,否则集合不能出现在WHERE子句中 HAVING子句或select列表中包含的子查询,以及列 聚合是一个外部引用 以下是查询: Select Distinct CONTACT_ID ,CREATED_TS,LASTUPD_TS,(LASTUPD_TS) as LAST_UPDATE from tblCCPMedicareS

我在医疗保险登记数据库中有一个查询,用于填充cred cov请求的数量。但是,我需要lastupd_TS字段仅过滤最大值。当我这样做时,我会得到一个错误:

除非是在一个集合中,否则集合不能出现在WHERE子句中 HAVING子句或select列表中包含的子查询,以及列 聚合是一个外部引用

以下是查询:

Select Distinct CONTACT_ID ,CREATED_TS,LASTUPD_TS,(LASTUPD_TS) as LAST_UPDATE
from tblCCPMedicareSpecific_Archive
where LASTUPD_TS=(Select MAX(lastupd_TS))and (OWNER_DEPT = 'LBECAS POA Enro') AND (CREATED_TS BETWEEN CONVERT(DATETIME, '2013-01-01 00:00:00', 102) AND CONVERT(DATETIME, 
                      '2013-12-31 00:00:00', 102))  
我的问题是如何将其筛选到最大值,因为我不能使用having子句,因为此列中有多个日期,我只希望输入最大或最后一个日期,这是否可行

Select CONTACT_ID, CREATED_TS, MAX(LASTUPD_TS) as LASTUPD_TS, MAX(LASTUPD_TS) as LAST_UPDATE 
from tblCCPMedicareSpecific_Archive 
where (OWNER_DEPT = 'LBECAS POA Enro') AND (CREATED_TS BETWEEN CONVERT(DATETIME, '2013-01-01 00:00:00', 102) AND CONVERT(DATETIME, '2013-12-31 00:00:00', 102))
group by CONTACT_ID, CREATED_TS

由于您只需要一个不同的行,但只需要LASTUPD_TS的最大值,因此我认为最好使用分组。在这种情况下,每个联系人ID和创建的联系人只返回一行。我感觉这也不是您所需要的。。。每个唯一联系人ID是否只有一行?特定联系人ID的每一行对于创建的联系人是否具有相同的值?如果是这样,您可以更改 GROUP BY只需联系您的ID,并使用MINCREATED作为该列的选择项

<>编辑:同样,我建议您也可以考虑在> = '2013-01-01'和CealDePTS <2014-01-01 00:00时之间更改过滤器到CealDeTyts之间的关系。当前版本将排除2013年12月31日发生的任何事件,但当天第一秒的午夜除外

SELECT CONTACT_ID
    ,CREATED_TS
    ,MAX(LASTUPD_TS) AS MAX_LASTUPD_TS

FROM tblCCPMedicareSpecific_Archive
WHERE (OWNER_DEPT = 'LBECAS POA Enro')
    AND (
        CREATED_TS BETWEEN CONVERT(DATETIME, '2013-01-01 00:00:00', 102)
            AND CONVERT(DATETIME, '2013-12-31 00:00:00', 102)
        )
GROUP BY CONTACT_ID, CREATED_TS