我有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
请有人建议正确的方法来做到这一点 谢谢
答案 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