使用不同的标准限制输出

时间:2015-08-31 10:08:35

标签: sql filter db2 row-number

我有以下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的表格,其填充方式如下:

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

等等。

表中每年有6组。

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

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

关于如何做到这一点的任何想法?

提前感谢您的帮助。

TheVagabond

1 个答案:

答案 0 :(得分:2)

您可以使用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
);

BTW:我不会选择group作为列名,因为它是SQL中的保留字。