[英]SQL query to break at first match of the condition
需要帮助以达到以下结果。
我有以下表项按名称排序
Name Rank ---------- A 1 B 1 C 2 D 1 E 2
我试图编写一个SQL查询以获取以下结果
Name Rank --------- A 1 B 1
条件就像我们发现等级> 1时停止进一步遍历并返回第一个匹配行之前的所有项目,在此示例中,名称'C'之前的所有行
SELECT
*
FROM
(
SELECT
ROW_NUMBER() OVER ( ORDER BY name) AS name_row_number,
ROW_NUMBER() OVER (PARTITION BY rank ORDER BY name) AS rank_row_number,
yourTable.*
FROM
yourTable
)
ordered
WHERE
name_row_number = rank_row_number
下面的示例显示,仅对于前两行,这些ROW_NUMBER()
值匹配。
Name Rank name_row_number rank_row_number
---------------------------------------------
A 1 1 1
B 1 2 2
C 2 3 1
D 1 4 3
E 2 5 2
我无法想象它在大型数据集上非常有效。
SELECT * FROM
(
SELECT name,rank FROM test
ORDER BY name,rank
)
WHERE RowNum < (
select min(rnk)
from (
SELECT
case rank when 2 then 'x' else 'y' end as tag,
row_number() over(order by name,rank) as rnk
from test
)Z
where tag='x'
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.