簡體   English   中英

SQL查詢在條件的第一次匹配時中斷

[英]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'
                )

SQL FIDDLE DEMO

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM