Diciamo che ho il seguente tabella del database:Ottieni le ultime N file nel database in ordine?
record_id | record_date | record_value
-----------+-------------+--------------
1 | 2010-05-01 | 195.00
2 | 2010-07-01 | 185.00
3 | 2010-09-01 | 175.00
4 | 2010-05-01 | 189.00
5 | 2010-06-01 | 185.00
6 | 2010-07-01 | 180.00
7 | 2010-08-01 | 175.00
8 | 2010-09-01 | 170.00
9 | 2010-10-01 | 165.00
voglio afferrare gli ultimi 5 righe con i dati in ordine di record_date ASC. Questo è facile da fare con:
SELECT * FROM mytable ORDER BY record_date ASC LIMIT 5 OFFSET 4
Il che mi avrebbe dato:
record_id | record_date | record_value
-----------+-------------+--------------
6 | 2010-07-01 | 180.00
7 | 2010-08-01 | 175.00
3 | 2010-09-01 | 175.00
8 | 2010-09-01 | 170.00
9 | 2010-10-01 | 165.00
Ma come faccio a fare questo quando non so quanti record ci sono e non posso calcolare la magia numero di 4?
ho provato questa domanda, ma se ci sono meno di 5 record, si traduce in un offset negativo, che non è valido:
SELECT * FROM mytable ORDER BY record_date ASC LIMIT 5
OFFSET (SELECT COUNT(*) FROM mytable) - 5;
così come faccio a ottenere questo risultato?
Per la prima query: perché io non voglio avere a ordinare nell'applicazione. Per la seconda query: ha funzionato perfettamente, ma non si adatta bene al mio DAL. Oh bene. Grazie! – Kristopher
@Travis La seconda query restituisce un errore. La query nidificata deve essere seguita da un'istruzione AS [nome_interrogazione] prima di ORDINARE DA –
@AndyStowAway: questa potrebbe essere una limitazione della tua implementazione. Sono abbastanza sicuro che le subquery anonime sono a posto (so che funzionano in Postres e MySQL). –