2017-01-23 17 views
0

私は各IDの最後のレコード(日付、与えられた、およびタイムスタンプに基づいて)を私に与えるクエリを探しています。SQL Serverクエリ。各IDの最後のレコード

私の場合、IDは「knr」なので、event_ap内のすべてのKNRの最後のレコードが必要です(名前を取得するためにpers_stmと一致します)。 Imは1つのIDに対してのみこの結果を得ることができますが、すべてのIDには適用できません。

私はこのテーブルを持っている(例のみ、両方のテーブルには千10以上entrysを持っている)

event_ap 

Ereignis a_nr tnr date   time knr maschnr 
PAN  123  2203 2017-01-23 8:00 11 x222 
PAN  132  2203 2017-01-22 8:00 22 x222 
PAB  123  2203 2017-01-23 9:00 11 x222 
PAN  555  2203 2017-01-23 6:00 33 x222 
PAN  555  2201 2017-01-23 11:00 44 x222 
PAB  222  2202 2017-01-23 10:00 44 x222 

pers_stm 

name knr 
Test1 11 
Test2 22 
Test3 33 
Test4 44 

私が何をしたいです私のクエリはこれまでですこの

Ereignis tnr date  time knr name maschnr 
PAB  2203 2017-01-23 9:00 11 Test1 x222 
PAN  2203 2017-01-23 6:00 33 Test3 x222 
PAN  2201 2017-01-23 11:00 44 Test4 x222 

です。しかし、明らかに、この1と私は、1つのIDの最後のレコードを持っていないの

SELECT TOP 1 A.Ereignis, A.tnr, A.date, A.time, A.knr, A.maschnr, B.name 
FROM event_ap AS A 
JOIN pers_stm AS B on A.knr = B.knr 
WHERE A.knr = '11' AND A.date = CONVERT(DATETIME, '23.01.2017') ORDER BY A.time DESC 

はご回答ありがとうございWHERE句と一致しているすべての

+0

のレコードが2017-01-22で作成されたため、23.01.2017の値を探していたので、2017-01-23 –

+0

の値を探しているので、 '(knr、date、time ) 'が一意であるか、照会出力で値が一致する2つの「最後の」レコードを考慮する必要がありますか? –

+0

待ち時間、最大日時、または指定された日の最大時間のみが必要ですか? –

答えて

1

あなたはこれで最後のレコードを取得することができます。

select * From (
    select * from 
    (
     select *, row_number() over (partition by knr order by date desc, time desc) as RN 
     from event_ap 
    ) X 
    where RN = 1 
) Y join pers_stm p pn p.knr = Y.knr 
0

アナリティクスrow_number機能を使用できます。

SELECT * 
FROM 
    (SELECT *, 
    row_number() over (partition BY knr order by TIME DESC) AS RN 
    FROM event_ap 
    WHERE DATE = '2017-01-23' 
) t 
WHERE rn = 1; 

これは、TIME列はタイプtimeであると仮定しています。そうでない場合は、

関連する問題