如何在 sql 服务器中使用限定 row_number 过滤数据

how to filter data using qualify row_number in sql server

我正在尝试使用 QUALIFY 过滤数据而无需 seccess(在 SQL 服务器中) 另外,我不想在 SELECT 语句中使用 row_number 创建 table 然后使用 WHERE 子句。

select *
from [dbo].[DWH_TicketThread_View]
where 1=1
and threadtype in (313,347,349,385,392,417)
and TicketId = 651353
qualify row_number() over(partition by ticketid order by updatedate desc) = 1

SQL服务器不支持Teradata等其他数据库中出现的QUALIFY。这是一种以类似的方式编写查询的方法,没有正式的子查询,使用 TOP 1 WITH TIES 技巧:

SELECT TOP 1 WITH TIES *
FROM [dbo].[DWH_TicketThread_View]
WHERE threadtype IN (313, 347, 349, 385, 392, 417) AND TicketId = 651353
ORDER BY ROW_NUMBER() OVER (PARTITION BY ticketid ORDER BY updatedate DESC);

但上面的实际上不是那么高效,所以更典型的是我们实际上会在这里使用子查询:

WITH cte AS (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY ticketid ORDER BY updatedate DESC) rn
    FROM [dbo].[DWH_TicketThread_View]
    WHERE threadtype IN (313, 347, 349, 385, 392, 417) AND TicketId = 651353
)

SELECT *
FROM cte
WHERE rn = 1;