繁体   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