使用不同的标准限制输出

Limiting output with different criterias

我有以下 SQL 声明:

select 
row_number() over(),
car, group, yearout 
from (select..... )inner 
where year(inner.yearout) between '2010' and '2030'
order by inner.group)temp

输出就像

1  test1   1   2010
2  test2   1   2010
3  test3   1   2012
4  test1   2   2010
5  test1   3   2011

等等。

还有一个叫做 outerno 的 table 填充如下:

no   yearo    amnt
1    2010     10
2    2010     15
3    2010     5
4    2010     10
5    2010     15
6    2010     8
1    2011     4
2    2011     15

等等。

每年table有6组。

现在的问题是我需要按照 outerno table 中所述限制查询的输出。 所以我需要第 1 组 2010 年的前 10 行,第 2 组需要 2010 年的前 15 行,依此类推。对于每一年和每一组,outerno 中都有一个值。

我尝试使用 row_number 但我不知道如何以这种方式限制输出,因为我需要例如第 1-10、50-65、83-88 行等.

知道怎么做吗?

在此先感谢您的帮助。

流浪汉

您将使用 ROW_NUMBER() 为您提供每组的记录数。然后添加一个 WHERE 子句以仅获取不超过所需数量的行号。在 ROW_NUMBER 的 ORDER BY 中,您可以指定首选记录。

select row_number() over (), car, group, yearout
from
(
  select 
    row_number() over (partition by inner.group, inner.yearout order by inner.car) as rn,
    inner.car, inner.group, inner.yearout 
  from (select..... ) inner 
  where inner.yearout between '2010' and '2030'
  order by inner.group
) all_records
where all_records.rn <=
(
  select amnt
  from outerno 
  where outerno.year = all_records.yearout
  and outerno.no = all_records.group
);

顺便说一句:我不会选择 group 作为列名,因为它是 SQL 中的保留字。