2014-09-15 2 views
0

У меня есть запрос в базе данных регистрации медикаментов, которую я использую для заполнения количества запросов cov. Однако мне нужно, чтобы в поле lastupd_TS было задано только максимальное значение. Когда я делаю это я получаю сообщение об ошибке:Как использовать функцию max в sub select на одной таблице

An aggregate may not appear in the WHERE clause unless it is in a subquery contained in a HAVING clause or a select list, and the column being aggregated is an outer reference.

Вот запрос:

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)) 

Мой вопрос, как я могу получить это фильтровать до максимального значения, как я не могу использовать, имеющий пункт потому что несколько дат будет в этой колонке, и я только хочу, максимальная или последняя дата, введенная

ответ

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 
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 для этого столбца.

Редактирование: Кроме того, я бы посоветовал вам также рассмотреть возможность изменения вашего фильтра МЕЖДУ CREATED_TS BETWEEN> = '2013-01-01'AND CREATED_TS <' 2014-01-01 00:00:00 '. Текущая версия исключает все, что произошло 12/31/2013, за исключением полуночи в первую секунду этого дня.

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 
Смежные вопросы