2016-08-08 5 views
0

У меня есть таблица db, у которой есть имя столбца STATUSDATE. Тип этого столбца - varchar2, и этот столбец уже имеет данные в формате dd/mm/yyyy. И я хочу получить последнюю дату (максимальная дата). Я использовал метод макс() для этого, но это не дает правильный результат, в качестве примера рассмотрим следующие датыSQL - Получить максимальную дату от dd/mm/yyyy, сформированного столбцом

31/08/2014

01/09/2016

после использования макс (STATUSDATE) результат - 31/08/2014. Я использую oracle db.

Я пытаюсь использовать следующий каменоломне, но так как выше проблемы его дать неправильные результаты

SELECT * FROM MY_DB.MY_TABLE t 
inner join (
    select CLIENTNAME, max(STATUSDATE) as MaxDate 
    from FROM MY_DB.MY_TABLE 
    group by CLIENTNAME 
) tm on t.CLIENTNAME = tm.CLIENTNAME and t.STATUSDATE = tm.MaxDate 

пожалуйста, кто может предложить правильный способ сделать это Спасибо

+4

Слишком поздно просто исправить тип столбца? –

+0

http://stackoverflow.com/questions/7118170/sql-server-select-only-the-rows-with-maxdate –

+0

Да, я не могу исправить тип столбца. – Kani

ответ

6

Мораль: Не хранить даты как строки. Базы данных имеют встроенные типы.

Таким образом, преобразование в соответствующую дату и взять максимум, но не нужно JOIN для этого:

select t.* 
from (select t.*, 
      rank() over (partition by client_name 
          order by to_date(statusdate, 'DD/MM/YYYY') desc 
         ) as seqnum 
     from my_db.my_table t 
    ) t 
where seqnum = 1; 
+0

этот карьер дает другой результат, но у него все еще есть проблема, о которой я упомянул в вопросе – Kani

+0

даны данные 2014 вместо данных 2016 – Kani

+1

@ Kani. , , Я неправильно понял вопрос. Для максимальной даты используйте 'desc' в' order by', а не 'asc' по умолчанию. –

0

Там нет необходимости inner join. Вы можете сделать это так:

select CLIENTNAME, desnse_rank() over (partition by client_name order by statusdate desc) as MaxDate 
FROM MY_DB.MY_TABLE 
where maxdate =1 
group by CLIENTNAME 
+0

Ваша карьера дает эту ошибку >> ERROR: ORA-00904: «MAXDATE»: неверный идентификатор – Kani

Смежные вопросы