2011-06-17 39 views
0

どのように私はこの中にこの文字数の代わりに文字列を保持しながら、文字列のMAXをグループ化するにはどうすればよいですか?

+--------+---------------+   
| ID  | name   |   
|--------|---------------|   
+ 1 | tim   |   
+-------------------------   
| 1 | timothy  |   
+--------++--------------+   
| 1 | timmy   |   
+--------|---------------|   
| 2 | jane   +   
+--------+---------------+   

を回すのですか?

+--------+---------------+   
| ID  | name   |   
|--------|---------------|   
+ 1 | timothy  |   
+-------------------------   
| 2 | jane   |   
+--------++--------------+   

問題は、文字列にMAXを使用し、文字列を保持し、IDでグループ化しているようです。

FWIWでは、表は実際には7K行と約40列です。私はそれが重要だとは思わないが、私はそれをちょうど言及している。私の既存のMAXの努力で

、私は、文字列統合する整数を取得しますが、いないよ...もちろん

答えて

2
Select Id, Name 
From MyTable 
    Join (
      Select Id, Max(Char_Length(name)) As NameLen 
      From MyTable 
      Group By Id 
      ) As Z 
     On Z.Id = MyTable.Id 
      And Z.NameLen = Char_Length(MyTable.Name) 

が、これはRobBobのようなシナリオを処理しません。その場合、両方が返されます。

+0

Excellent--ありがとう!:) – kelm

+0

@kelm - これは、最も長い長さを持つ同じID内の名前を探しているので、すでにそれを行うでしょう。だから "Bobby"は "Bob"より長く、同じIDのために "Bobby"を選ぶでしょう。 Rob、Bob、Bobbyがすべて同じ名前の変種であることを知るロジックはありません。 – Thomas

+0

それはうまくいった。再度、感謝します! – kelm

関連する問題