SQL查询在条件的第一次匹配时中断

时间:2014-04-07 17:29:43

标签: sql oracle

需要帮助才能获得以下结果。

我有按名称

排序的以下表格条目
Name  Rank
----------
A      1
B      1
C      2
D      1
E      2

我正在尝试编写SQL查询以获得以下结果

Name  Rank
---------
A      1
B      1

条件就像我们找到等级> 1停止进一步遍历并返回本例中第一个匹配行之前的所有项目名称'C'之前的所有行

2 个答案:

答案 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'
                )

SQL FIDDLE DEMO