Teradata - limitando i risultati utilizzando TOP
Domanda
Sto cercando di recuperare un enorme insieme di record da Teradata mediante JDBC. E ho bisogno di rompere questo set in parti per il quale sto usando "Top N" clausola select. Ma non so come impostare la "Offset" come come facciamo in MySQL -
SELECT * FROM tbl LIMIT 5,10
in modo che la prossima istruzione select mi avrebbe recuperare i record da (N + 1) ° posizione.
Soluzione
RANK e qualificare ho beleive sono i tuoi amici qui
per 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 set di risultati, ordinarli dal ORDER BY campo e assegnare un ID rango incremento a loro.
QUALIFICARSI consente di slice che limitando le righe restituite per l'espressione di qualificazione, che ora può legalmente visualizzare i ranghi.
Per essere chiari, io sto tornando le righe 900-1000th nella query seleziona tutto da cusotmers, Non tornare i clienti con ID tra i 900 ei 1000.
Altri suggerimenti
È inoltre possibile utilizzare l'aggregato finestra ROW_NUMBER
su Teradata.
SELECT ROW_NUMBER() OVER (ORDER BY custID) AS RowNum_
, custID
FROM myDatabase.myCustomers
QUALIFY RowNum_ BETWEEN 900 and 1000;
A differenza delle finestre RANK
aggregano, 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.