2016-08-08 7 views
0

カラム名がSTATUSDATEのdbテーブルがあります。この列のタイプはvarchar2で、その列のデータはすでにdd/mm/yyyy形式です。そして私は最近の日付(最大日付)を取得したい。例として は日付を最大(STATUSDATE)を使用した後SQL - dd/mm/yyyy形式の列から最大日付を取得

31/08/2014

2016年1月9日

を以下の点を考慮、私はこのためにMAX()メソッドを使用しますが、それは正しい結果が得られていません結果は2014年10月31日です。私は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-therows-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

2016データの代わりに2014データが与えられています。 – Kani

+1

@ Kani。 。 。私はその質問を誤解した。最大の日付については、デフォルトの 'asc'ではなく' order by'で 'desc'を使います。 –

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

あなたの採石場からこのエラーが出ます>>エラー:ORA-00904: "MAXDATE":無効な識別子 – Kani

関連する問題