SQL - 从dd / mm / yyyy格式化列获取最大日期

时间:2016-08-08 11:20:20

标签: sql oracle

我有db表,其列名为STATUSDATE。此列的类型为varchar2,该列已具有dd / mm / yyyy格式的数据。我想得到最近的日期(最长日期)。我为此使用了max()方法,但它没有给出正确的结果, 例如,考虑以下日期

31/08/2014

2016年1月9日

使用max(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

请有人建议正确的方法来做到这一点 谢谢

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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