2016-05-23 8 views
2

私は、次のデータおよび大規模な問題を抱えている:Oracleデータベース内 私はこのようなテーブル内のいくつかのデータを持っている...テーブルから文字を最大にアルファベットに変換するには?

id version article 
1  A  B001 
2  B  B001 
3  C  B001 
4  AA  B001 
5  AB  B001 
6  Z  B001 
7  D  B001 

私は、この表から最大バージョンにしたい..

Select MAX(version) from articles Where article = 'B001' 

それは

間違っているが、私はあなたがそれを行うことができます「AB」

答えて

0

をしたい「Z」の結果を提供します二つのステップで、1)の長さを比較し、2)それらの最大値を選択します。あなたはそれが動的なすべての記事のために必要な場合

SELECT MAX(t.version) FROM articles t 
WHERE article = 'B0001' 
    AND length(t.version) = (SELECT max(length(s.version)) FROM articles s 
          WHERE s.article = 'B0001') 

を:

SELECT t.article, MAX(t.version) FROM articles t 
WHERE 
    length(t.version) = (SELECT max(length(s.version)) FROM articles s 
         WHERE s.article = t.article) 
GROUP BY t.article 
+0

ハロー親愛なるが、それでもこれらのクエリは私を与えます最大バージョンは 'Z' ですが、結果は 'AB'です。 –

+0

@RaviKumarそれは奇妙です、あなたはそれを正しく使用していますか?正確にあなたが投稿したようなデータですか?これはうまくいくはずです。サブクエリは、これが最長の文字列であることを確認します。 – sagi

+0

はい実際にテーブルのバージョンで作業しているのは文字タイプのフィールドです。それよりもトリムが使用されている場合は –

2
with tab(id, version, article) as (select 1 ,'A', 'B001' from dual union all 
     select 2, 'B', 'B001' from dual union all 
     select 3, 'C', 'B001' from dual union all 
     select 4, 'AA', 'B001' from dual union all 
     select 5, 'AB', 'B001' from dual union all 
     select 6, 'Z', 'B001' from dual union all 
     select 7, 'D', 'B001' from dual) 
select trim(max(lpad(version,3,' '))) ver from tab where article = 'B001' 
group by article; 
+0

ありがとう –

関連する問題