2011-09-05 13 views
6

Sto cercando di recuperare un enorme set di record da Teradata usando JDBC. E ho bisogno di rompere questo insieme in parti per le quali sto usando la clausola "Top N" in select. ma non so come impostare la "Offset" come come facciamo in MySQL -Teradata: limitazione dei risultati utilizzando TOP

SELECT * FROM tbl LIMIT 5,10 

in modo che la prossima istruzione select mi avrebbe recuperare i record da (N + 1) ° posizione.

risposta

5

RANK e qualificare ho beleive sono i tuoi amici

ad esempio

SEL RANK(custID), custID 
FROM mydatabase.tblcustomer 
QUALIFY RANK(custID) < 1000 AND RANK(custID) > 900 
ORDER BY custID; 

RANK (campo) sarà (concettualmente) recuperare tutte le righe del gruppo di risultati, fine loro dal ORDER BY campo e assegnare loro un ID di classificazione incrementale.

QUALIFY consente di suddividerlo limitando le righe restituite all'espressione di qualifica, che ora può visualizzare legalmente i RANK.

Per essere chiari, io sto tornando le righe 900-1000th nella query selezionare tutti da cusotmers, non restituendo i clienti con ID tra 900 e 1000.

+0

grazie. questo è quello che stavo cercando. – Aanand

+0

Suggerirei di utilizzare la versione aggregata della finestra di 'RANK ({column})' andando avanti. Il RANK come mostrato in questa risposta è stato deprecato dal Teradata 12. 'RANK() OVER (ORDER BY custID) AS Rank_' e quindi' QUALIFY su Rank_ TRA 900 E 1000'. Se si include la clausola 'PARTITION BY' (opzionale), è possibile ripristinare la classifica quando cambia il set di partizioni delle colonne. Tieni presente che se la colonna che stai ordinando non è unica, il RANK non ti fornirà una sequenza pura. –

5

È inoltre possibile utilizzare l'aggregato ROW_NUMBER finestra su Teradata.

SELECT ROW_NUMBER() OVER (ORDER BY custID) AS RowNum_ 
    , custID 
    FROM myDatabase.myCustomers 
QUALIFY RowNum_ BETWEEN 900 and 1000; 

differenza l'aggregato RANK finestre, ROW_NUMBER vi fornirà una sequenza indipendentemente dal fatto che la colonna che si sta ordinando il set di partizioni opzionale è unica o meno.

Solo un'altra opzione da considerare.

Problemi correlati