如何为每个参数获取每分钟在表中完成的最新条目

时间:2016-12-02 13:23:20

标签: sql sql-server greatest-n-per-group

我在这样保存的表中有记录:

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

每个参数的数据每分钟多次出现,我想找到每分钟最新的每个参数的数据,也就是说: 假设参数1的数据在2015-11-25 17:41:00.000和2015-11-25 17:42:00.000之间出现3次,所以我想要第三次出现的数据,这需要为每个参数完成。

所以我按照上述条目设置的结果数据应该是:

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

我尝试过分区和填充分组......但它似乎没有用。在这方面的任何帮助将不胜感激。

由于

1 个答案:

答案 0 :(得分:2)

使用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

返回

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