1

私はこれについて一日中髪を引っ張っています。誰か助けてくれませんか。おそらくかなり単純だと思いますが、私が望むものを正確に得ることはできません。

テーブルのデータは次のようになります

CallId      ProblemDescription  CurrentAction     CurrentEngineer    EventNumber
CON-00002                       Respond to Call                      0
WHS-00001                       Respond to Call                      0
WHS-00002                       Respond to Call                      0
WHS-00003                       Respond to Call                      0
WHS-00003                       Fix Problem                          1
WHS-00003                       Problem Fixed                        2

私がやりたいことは、各 CallId のすべての列を最大イベント番号で表示することです。いえ

CallId      ProblemDescription  CurrentAction     CurrentEngineer    EventNumber
CON-00002                       Respond to Call                      0
WHS-00001                       Respond to Call                      0
WHS-00002                       Respond to Call                      0
WHS-00003                       Problem Fixed                        2

しかし、私はそれを行う方法を理解できません。

現時点で私が使用している

Select CallId, MAX(ProblemDescription), MAX(CurrentAction), MAX(CurrentEngineer),
MAX(EventNumber) FROM [Table] GROUP BY CallId

これが明らかにすべての列の最大値を個別に返す方法。したがって、上記の場合、CurrentAction 列には「not」と表示されRespond to CallますRespond to Call

誰かがこれを行う方法を教えてもらえますか???

ありがとう

4

3 に答える 3

3

あなたが探していると思いますDENSE_RANK

WITH CTE AS
(
   SELECT 
      CallId, 
      ProblemDescription, 
      CurrentAction, 
      CurrentEngineer, 
      EventNumber,
      Rank = DENSE_RANK() OVER (PARTITION BY CallId ORDER BY EventNumber DESC)
   FROM dbo.TableName
)
SELECT 
   CallId, ProblemDescription, CurrentAction, CurrentEngineer, EventNumber
FROM 
   CTE
WHERE 
   RANK = 1

代わりにCallId、同じ最大EventNumber使用量の複数の行がある場合でも、 1 つの行のみが必要な場合。ROW_NUMBER

于 2013-03-19T15:56:40.060 に答える
1

これには row_number() を使用します。

select CallId, ProblemDescription, CurrentAction, CurrentEngineer, EventNumber
from (select t.*,
             ROW_NUMBER() over (partition by callId order by eventnumber desc) as seqnum
      from t
     ) t
where seqnum = 1
于 2013-03-19T15:54:45.850 に答える
0

このコードを使用します。* イベント番号列でのみ最大集計を使用します。

SELECT CallID, Problem_Description, Current_Action, Current_Engineer, MAX( Event_Number ) FROM test.data GROUP BY CallID;

これはあなたを助けるかもしれません

于 2013-03-19T16:20:28.143 に答える