2016-12-02 3 views
1

ich Datensätze in Tabellen wie folgt gespeichert:Wie neuesten Eintrag in einer Tabelle für jeden Parameter für jede Minute, getan holen

ID | PID | Param | Param Value | Date time    | 
---|-------|--------|-------------|------------------------ 
1 | 195 |Param 1 | 12  |2015-11-25 17:41:05.000 
2 | 211 |Param 2 | 13  |2015-11-25 17:41:05.000 
3 | 195 |Param 1 | 14  |2015-11-25 17:41:35.000 
4 | 211 |Param 2 | 15  |2015-11-25 17:41:35.000 
5 | 195 |Param 1 | 16  |2015-11-25 17:42:05.000 
6 | 211 |Param 2 | 17  |2015-11-25 17:42:05.000 
7 | 195 |Param 1 | 16  |2015-11-25 17:42:35.000 
8 | 211 |Param 2 | 17  |2015-11-25 17:42:35.000 

Daten für jeden param mehrmals pro Minute kommen und ich mag, Daten zu finden, Für jeden Parameter, der spätestens in jeder Minute kam, heißt das: Angenommen Daten für Param 1 kamen 3 Mal zwischen 2015-11-25 17: 41: 00.000 und 2015-11-25 17: 42: 00.000, also möchte ich die Daten das kam das dritte Mal und das muss für jeden param getan werden.

Also meine Ergebnisdaten-Set nach oben Einträge sein sollte wie:

ID | PID | Param | Param Value | Date time    | 
-----------------+---------------------------------------- 
3 | 195 |Param 1 | 14  |2015-11-25 17:41:35.000 
4 | 211 |Param 2 | 15  |2015-11-25 17:41:35.000 
7 | 195 |Param 1 | 16  |2015-11-25 17:42:35.000 
8 | 211 |Param 2 | 17  |2015-11-25 17:42:35.000 

ich versucht habe, durch Trennung und Sachen Gruppierung ... aber es scheint nicht zu funktionieren. Jede Hilfe in dieser Hinsicht wird sehr geschätzt.

Dank

Antwort

2

Mit der Fensterfunktion und die Partition von Datepart

Select * 
From (
     Select * 
      ,RN = Row_Number() over (Partition By PID,Param ,datepart(MI,[Date time]) Order by [Date time] Desc) 
     From YourTable 
    ) A 
Where RN=1 

Returns

ID PID Param Param Value Date time    RN 
3 195 Param 1 14   2015-11-25 17:41:35.000 1 
7 195 Param 1 16   2015-11-25 17:42:35.000 1 
4 211 Param 2 15   2015-11-25 17:41:35.000 1 
8 211 Param 2 17   2015-11-25 17:42:35.000 1 
Verwandte Themen