2016-09-27 100 views
0

我不确定如何对该组中的最后一个值进行分组和选择,并且可以使用一些专业知识。从多个分组中选择最后一个值(SQL Server)

这个简单的表格(下表中的片段)包含了我检查的一系列URL没有正确响应时的各种时间戳的值。黄色突出显示的行代表我试图捕获的数据。

Objective

基本上我试图捕捉每一个分组的最后一个停机时间戳记。 failure_id将自动增加每个条目。

我有以下配置的部分成功:

WITH FAILURES AS 
(
    SELECT *, ROW_NUMBER() OVER (PARTITION BY url_id ORDER BY failure_id DESC) AS lastFail 
    FROM URL_FAILURES 
) 

,然后建立我的实际SELECT语句的数据和条件

WHERE 
    lastFail = 1 

...但它忽略了分组我需要last_check_success。


Microsoft SQL Server 2008 R2 (SP3) 
Database Compatibility: SQL Server 2005 

回答

1

试试这个

WITH FAILURES AS 
    (
     SELECT *, ROW_NUMBER() OVER (PARTITION BY url_id ,last_check_success ORDER BY failure_id DESC) AS lastFail 
     FROM URL_FAILURES 
    ) 
+0

这么小的调整 - 这就是修复!谢谢 – Craig

1

试试这个: 与失败视为 ( SELECT url_id,request_start,last_check_success,LAST_VALUE(failure_id)OVER(PARTITION BY last_check_success ORDER BY request_start) FROM URL_FAILURES )

+0

恐怕LAST_VALUE是在SQL Server 2012中引入的,而我被锁定到以前的版本 – Craig

1

你需要t o根据您的要求使用LAST_VALUE

WITH FAILURES AS 
(
    SELECT *, LAST_VALUE(Failure_id) OVER (PARTITION BY url_id ,last_check_success ORDER BY Request_Start) AS lastFail 
    FROM URL_FAILURES 
) 
+0

恐怕LAST_VALUE是在SQL Server 2012中引入的,而我被锁定到以前的版本 – Craig