2009-05-26 2 views
0

Ich möchte die "state of the art" Möglichkeiten sammeln, um Ergebnisse für jede Datenbank in diesem Wiki zu paginieren.Seite Ergebnisse in [Datenbank Ihrer Wahl]

Input: Ich habe eine große Tabelle PAGE_ME:

create table PAGE_ME (
    ID bigint not null, 
    NAME varchar(32) not null, 
    CREATED TIMESTAMP not null 
) 

id als created nicht unbedingt in der gleichen Reihenfolge ist. Ich möchte die Ergebnisse zwischen 5. May 2008 09:03:01 und 3. Aug 2008 11:00:01, 20 zu einer Zeit, geordnet nach Zeit, aufsteigend (5. Mai zuerst) anzeigen. Die Abfrage sollte zurückkehren NAME und CREATED (plus was auch immer das Ergebnis Paginieren müssen), so dass die innere Abfrage ist:

select NAME, CREATED 
from PAGE_ME 
where CREATED between '2008-05-05 09:03:01' and '2008-08-03 11:00:01' 
order by CREATED asc 

an den Keyboards, bereit ... Go! ;)

Antwort

1

Lesen Sie die Paging-Abfragen von meinem article here und sql server here. Alle Abfragen sind dazu gedacht, mit jeder Frage zu arbeiten, die Sie an sie werfen, also keine Tricks, die nur in bestimmten Situationen funktionieren.

1

In Oracle eine gemeinsame Lösung ist:

select NAME, CREATED 
from 
(select NAME, CREATED, ROWNUM rn 
    from 
    (select NAME, CREATED 
    from PAGE_ME 
    where CREATED between '2008-05-05 09:03:01' and '2008-08-03 11:00:01' 
    order by CREATED asc 
) 
    where ROWNUM <= :max_row 
) 
where rn >= :min_row 

Hier: min_row und: Max_row die Grenzen der aktuellen Seite zu definieren, z.B. 1 und 10, 11 und 20, ...

+0

Ich benutze dies die ganze Zeit. Es gibt ein ähnliches Feature in neueren Versionen von MSSQL, so dass Sie das gleiche Konstrukt (mit geringfügigen Änderungen) auch in MSSQL verwenden können. –

+0

Oh ja und du brauchst die Unterabfrage nicht in der Mitte, da du die order by-Klausel in der innersten Unterabfrage hast, kannst du einfach das "ROWNUM <= x" -Ding im innersten haben und den mittleren loswerden . –

+1

Sie meinen, Sie brauchen es nicht in MSSQL? Sie brauchen es in Oracle, sonst erhalten Sie nicht die richtigen Daten. –