Select 多个分组中的最后一个值(SQL 服务器)

Select last value from within multiple groupings (SQL Server)

我不确定如何分组和 select 该组中的最后一个值,并且可以使用一些专业知识。

这个简单的 table(下面 table 的片段)保存了当我检查的一系列 URL 没有正确响应时的各种时间戳的值。黄色突出显示的线表示我正在尝试捕获的数据。

本质上,我正在尝试捕获每个分组的最后一次停机时间戳。 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

试试这个

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

试试这个: 与失败一样 ( SELECT url_id, request_start, last_check_success, last_value(failure_id) OVER (PARTITION BY last_check_success ORDER BY request_start) 来自 URL_FAILURES )

您需要使用 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
)