2011-11-29 9 views
5

Ho una tabella MySQL con i seguenti dati (esempio);come ottenere il valore dell'ultima riga nel database mysql

UserId - DeviceId - StartDate - EndDate 
------------------------------------------------------ 
1001  D119822   11/27/2011  12/02/2011 
1001  D198726   11/27/2011  12/02/2011 
1001  D552833   11/27/2011  12/02/2011 
1001  D980993   11/27/2011  12/02/2011 

Ho cercato per una sorta di row_num o ordinal_position cosa, ma non trovò nulla. Come posso ottenere l'ultimo record dalla tabella sopra senza aggiungere una colonna numero di serie/incremento automatico?

+1

Qual è l'ultimo record e perché? Qual è la chiave primaria? – gbn

+0

@gbn: Dall'ultimo record, intendo il record che è stato aggiunto per ultimo. E non c'è nessuna colonna chiave primaria nella mia tabella. –

+1

Hai bisogno di qualcosa da utilizzare in una clausola ORDER BY. Una tabella (set) ha ** nessun ordine implicito ** in SQL – gbn

risposta

4

Prova questa query, l'ho provata e funziona per me.

select s.*, @rownum:[email protected]+1 as rank 
from your_table s, (SELECT @rownum:=0) r 
order by rank DESC 
LIMIT 1; 
+0

il rango è arbitrario su dataset di grandi dimensioni. Non sai come sarà valutato – gbn

+0

@gbn Non so davvero se MySQL ordina i dati quando non si specifica una clausola ORDER BY. Ho testato la richiesta su più tabelle e ha restituito la risposta corretta così l'ho postata;) – Fred

+0

Non c'è nessun ordine senza un ORDINE PER – gbn

4

"ultimo" può essere alfabetico, il tempo, il valore ecc È necessario definire che in una semplice query:

SELECT * 
FROM Mytable 
ORDER BY (some criteria that defines "last") DESC 
LIMIT 1; 
+0

ma la mia tabella non ha un 'criterio che definisce qualcosa di simile. –

+0

@gbn Non è necessario disporre di criteri per questa richiesta, penso che potrebbe essere risolto creando un contatore. Puoi darmi il tuo feedback sulla mia richiesta? – Fred

3

Ok, quindi la risposta a questa domanda è semplicemente NO. MySQL non ti fornisce una funzionalità incorporata che ti consente di tenere traccia dell'ordine in cui sono stati inseriti i dati.

È possibile aggiungere una colonna che incrementa automaticamente (ID univoco) quando viene inserita una riga oppure è possibile aggiungere una colonna di data e ora per tenere traccia dell'ora in cui è stata inserita la riga.

Se non ti è permesso di manipolare la tabella, potresti forse aggiungere una nuova tabella per archiviare l'ultima riga di dati aggiunta (ma questa è solo una brutta soluzione).

+0

Dai un'occhiata alla mia richiesta;) Non sei obbligato a modificare la struttura della tabella. – Fred

+0

Si arriva sempre al tempo e ai soldi. Se ottenere gli ultimi dati aggiunti vale il tempo e il denaro necessari per ristrutturare la tabella, allora è quello che dovrebbero fare. Manutenzione e ulteriore sviluppo sarebbero anche più facili e meno costosi se ci fosse un ID auto incrementato da qualche parte. – Niklas

Problemi correlati