需要帮助才能获得以下结果。
我有按名称
排序的以下表格条目Name Rank ---------- A 1 B 1 C 2 D 1 E 2
我正在尝试编写SQL查询以获得以下结果
Name Rank --------- A 1 B 1
条件就像我们找到等级> 1停止进一步遍历并返回本例中第一个匹配行之前的所有项目名称'C'之前的所有行
答案 0 :(得分:2)
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
我无法想象它在大型数据集上非常有效。
答案 1 :(得分:0)
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'
)