我已经能够成功使用下面的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的情况下完成吗?
答案 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的文章相关联。它不适合我,但它似乎确实是一篇好文章。