SQL Server能否在不使用cte的情况下根据排名限制查询结果?

时间:2015-03-17 19:58:28

标签: sql sql-server

我已经能够成功使用下面的SQL包含给我输出的等级的cte。

WITH cte AS (
   SELECT foo, bar,
   rank() OVER(PARTITION BY foo ORDER BY bar) AS [rank]
   FROM baz)
select * from cte where [rank]=1

我的问题是,这可以在没有使用cte的情况下完成吗?

1 个答案:

答案 0 :(得分:-1)

您可以将OUTER APPLY用作相关子查询。这在一些RDBMS(Oracle,PostgreSQL)中也称为LATERAL连接或视图。它看起来像LEFT JOIN,但通常表现得更好。

Real life example, when to use OUTER / CROSS APPLY in SQL

SELECT pr.name,
       pa.name
FROM   sys.procedures pr
       OUTER APPLY (SELECT TOP 2 *
                    FROM   sys.parameters pa
                    WHERE  pa.object_id = pr.object_id
                    ORDER  BY pr.name) pa
ORDER  BY pr.name,
          pa.name

该问题与several solutions for the "greatest N per group" problem的文章相关联。它不适合我,但它似乎确实是一篇好文章。