2017-04-10 10 views
0

に文字と混合された最大値を取得する方法:私は、テーブルは次のように定義されているのSQLServer

Name  Value 
-----  ----- 
Alice  MN21 
Bob  MN22 

iは

select Name,MAX(Value) as Value from #Character 

のような最大値を取得したいし、それが表示されます

Name  Value 
----  ----- 
Bob  MN22 

+0

あなたの値の形式は2つだけの文字列と、その後数のように同じまま最高のでしょうか? –

+0

@SandipPatel Yep –

+0

2つの値を比較する論理は何ですか? – TriV

答えて

1

シンプルさが

select top 1 Name,Value from #Character order by Value desc 
+0

シンプルさが最高です! –

0

すると、以下のように同じ形式の数字のみを取得するためにSUBSTRINGを使用することができ、この

select Name,Value from #Character where value in (
    select MAX(CAST(value AS int)) from #Character) 
+0

それは私の問題を解決しました!どうもありがとうございました! –

+0

この回答が正しい場合は – ashkufaraz

+0

このデータでは動作しません:(1)ON33(2)AN42 –

1

をお試しください:

SELECT TOP(1) 
    Name, 
    Value, 
    SUBSTRING(Value,3,LEN(Value)) AS MaxValue 
FROM @tblTest order by CAST(SUBSTRING(Value,3,LEN(Value)) AS INT) DESC 
+0

エラーを報告していませんか?値の長さを指定して3桁目から始めると、範囲外になります。 –

+0

私はすでにそれが同じフォーマットに従っていることを確認しています。常に最初の2文字の文字列と数値があります。 –

+0

OPでの確認には常に文字列の最初の2文字があるのでエラーは発生しません –

0

この

select Name,MAX(Value REGEXP '[0-9]{5}') as Value from #Character 
1

を試してみてください、あなたのような何かが必要ですこの?

CREATE TABLE #CH (NAME VARCHAR(20), VALUE VARCHAR(10)) 
INSERT INTO #CH VALUES ('Alice', 'MN21'), ('Bob', 'MN22'), ('Angie', 'AO42'),('Karl', 'AO27'); 
SELECT NAME, MAXVAL, VALUE 
FROM #CH 
INNER JOIN (SELECT SUBSTRING(VALUE,1,2) AS LEFTPART, MAX(SUBSTRING(VALUE,3,2)) AS MAXVAL 
      FROM #CH 
      GROUP BY SUBSTRING(VALUE,1,2)) B ON #CH.VALUE = B.LEFTPART+B.MAXVAL 

Output: 
NAME     MAXVAL VALUE 
-------------------- ------ ---------- 
Bob     22  MN22 
Angie    42  AO42 
関連する問題