[英]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.