2

次のような一時テーブル (#TempTable) があります。

AID         StartTime   EndTime     StartSID EndSID     Name

79F05D45    2013-07-02  2013-07-03  1226349  1227338    
79F05D45    2013-07-03  2013-07-03  1227381  1227901    
79F05D45    2013-07-03  2013-07-03  1233976  1233977    John Pringle
79F05D45    2013-07-03  2013-07-03  1234386  1234452    
79F05D45    2013-07-03  2013-07-03  1235138  1235147    
79F05D45    2013-07-03  2013-07-03  1235669  1235708    Mike Gordon
79F05D45    2013-07-03  2013-07-03  1235828  1239004    Jeff Smith

Nameで Aggregate 関数を使用して、 GROUP BY StartTimeEndTimeのときにNameJohn Pringleを取得するにはどうすればよいですか(使用してみましたが、空白の値が返され、使用するとJeff Smithが得られます)MIN(Name)MAX(Name)

基本的に、私の要件は、列Nameで最初に利用可能な値を取得することです

ここに私のクエリがあります:

SELECT
    TT.AID,
    MIN(StartTime) as StartTime,
    MAX(EndTime) as Endtime,
    MIN(StartSSID) as StartSID,
    MAX(EndSSID) AS EndSID,
    -- I tried MIN(Name) here but I get empty cell, MAX(Name) gives wrong result. Basically I want first available value in the Name column here (which is John Pringle).
    FROM
        #TempTable TT
    GROUP BY TT.AID, StartTime, EndTime

私が得る結果:

AID         StartTime   EndTime     StartSID EndSID     Name

79F05D45    2013-07-02  2013-07-03  1226349  1227338    
79F05D45    2013-07-03  2013-07-03  1227381  1239004

私が目指している結果:

AID         StartTime   EndTime     StartSID EndSID     Name

79F05D45    2013-07-02  2013-07-03  1226349  1227338        
79F05D45    2013-07-03  2013-07-03  1227381  1239004    John Pringle

ありがとう!

4

1 に答える 1

2
;WITH a as
(
SELECT
    AID,
    StartTime,
    EndTime,
    StartSSID,
    EndSSID,
    rn = row_number() over (partition by AID,cast(starttime as date) order by case WHEN name = '' or name is null then '20990101' else starttime end, starttime)
    FROM
        #TempTable TT
)
SELECT AID, StartTime, EndTime, StartSSID, EndSSID
WHERE rn = 1
于 2013-07-17T20:59:23.623 に答える