2016-01-26 3 views
0

У меня есть поле datetime, которое я бы хотел найти, а затем усечь его, чтобы у меня только «ГГГГ-ММ-ДД».SQL Find MAX и truncate

Мое утверждение

select TO_CHAR(MAX(AUDIT_TIMESTAMP), 'YYYY-MM-DD') as UPDATE_DATE from   
BUS.ZIP_ACTIVITY 
where zip = '01001' order by AUDIT_TIMESTAMP 

Это терпит неудачу. Что я делаю не так?

Спасибо, Джо

+0

Используемый тег dbms. (Некоторый не ANSI SQL там ...) – jarlh

+0

Удалите ORDER BY, не нужно, так как возвращается только одна строка. (Кроме того, это неправильно.) – jarlh

+0

Я всегда удивляюсь, когда вижу вопрос, который говорит, что он терпит неудачу, но не публикует сообщение об ошибке или какие-либо объяснения о том, что не удается. В этом случае, однако, это «порядок от» – Lamak

ответ

0

Проблема с запросом является ORDER BY. У него есть столбец, который не распознается, потому что у вас есть запрос агрегации. Запрос возвращает только одну строку, поэтому ORDER BY не требуется вообще. Итак:

select TO_CHAR(MAX(AUDIT_TIMESTAMP), 'YYYY-MM-DD') as UPDATE_DATE 
from BUS.ZIP_ACTIVITY 
where zip = '01001' ; 

Если вы хотите это для всех молний:

select zip, TO_CHAR(MAX(AUDIT_TIMESTAMP), 'YYYY-MM-DD') as UPDATE_DATE 
from BUS.ZIP_ACTIVITY 
group by zip; 

Примечания: Это предполагает, что ваша база данных поддерживает функцию to_char().

0

Вот что вам нужно:

SELECT DATE_FORMAT(MAX(AUDIT_TIMESTAMP), "%Y-%m-%d") as UPDATE_DATE 
FROM BUS.ZIP_ACTIVITY 
WHERE zip = '01001' 
+0

Любые причины изменения 'TO_CHAR' на' DATE_FORMAT'? – Lamak

+0

Только если вы используете MySQL вместо Oracle. Я думал, что он использует MySQL. –