我在医疗保险登记数据库中有一个查询,用于填充信用证申请的数量。但是我需要lastupd_TS字段来仅过滤最大值。当我这样做时,我收到一个错误:
聚合可能不会出现在WHERE子句中,除非它在a中 包含在HAVING子句或选择列表中的子查询以及列 被聚合是一个外部参考。
以下是查询:
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子句,因为此列中有多个日期,我只想输入最大或最后日期
答案 0 :(得分:0)
这不起作用吗
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
答案 1 :(得分:0)
由于你只想要一个DISTINCT行,但只想要MAX的LASTUPD_TS,我认为你最好使用GROUPing。这将为您的GROUP选择仅返回一行(在这种情况下,每个CONTACT_ID和CREATED_TS一行)。我觉得这不是你需要的......每个唯一的CONTACT_ID只有一行吗?特定CONTACT_ID的每一行是否都具有相同的CREATED_TS值?如果是这样,你可以改变 GROUP BY只是CONTACT_ID并使用MIN(CREATED_TS)作为该列的SELECT。
编辑:另外,我建议您也考虑将BETWEEN过滤器更改为CREATED_TS BETWEEN> ='2013-01-01'AND CREATED_TS< '2014-01-01 00:00:00'。当前版本将排除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