# [DB2] Die ersten X-Datensätze einer Abfrage anzeigen



## Thomas Darimont (9. Januar 2007)

Hallo,

Hier mal ein Beispiel wie man für DB 2 die ersten X-Datensätze einer Abfrage ausgeben kann:

Standard SQL:


```
select 
* 
from 
    (
     select 
         ROW_NUMBER() over (order by someUniqeId asc) as rownumber,
         someUniqeId,
         someOtherField
         from 
         someSchema.someTable
         ) as bubu 
where 
rownumber <=10
```

Spezielle DB2 Syntax:

```
select * from someSchema.someTable fetch first 10 rows only
```

Bei Mysql/Postgresql gibts dazu das keyword 'Limit' und bei Oracle kann man über die
Pseudospalte rownum gehen. Bei MS SQLServer sagt man gibts das Keyword 'Top'

Gruß Tom


----------



## thoser (14. März 2008)

Aber wie liest man von einem Startpunkt  x Datensätze aus 


EDIT:

Zumindest für Version 8.2 existiert ein grausamer Workaround:

```
select * from (select a.*,rownumber over() as row from <tablename> where <where clause>) as tab where row between <start> and <end>
```

Hier liest die DB2 *alle* Datensätze aus <tablename>, übergibt sie an das äußere Select und gibt dann die Datensätze zwischen <start> und <end> zurück.

Grausam schrieb ich, denn wenn man eine Tabelle mit 30000 Datensätzen hat ...- muß ich mehr sagen? 

Mir wurde von unserem DB2-Guru mitgeteilt, das DB2 V8 keine Möglichkeit zum Zurückgeben eines Bereichs kennt wie z.B. Mysql, Oracle,...


Steffen


----------

