2011-11-29 32 views
5

Tengo una tabla MySQL con los siguientes datos (muestra);cómo obtener el valor de la última fila en la base de datos 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 

He buscado algún tipo de row_num o ordinal_position cosa, pero no encontró nada. ¿Cómo podría obtener el último registro de la tabla anterior sin agregar una columna de número de incremento serial/automático?

+1

¿Cuál es el último registro y por qué? ¿Cuál es la clave principal? – gbn

+0

@gbn: según el último registro, me refiero al registro que se agregó por última vez. Y no hay una columna de clave primaria en mi tabla. –

+1

Necesita algo para usar en una cláusula ORDER BY. Una tabla (conjunto) tiene ** ningún orden implícito ** en SQL – gbn

Respuesta

4

Intentar esta consulta, he probado y funciona para mí.

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

el rango es arbitrario en conjuntos de datos grandes. No sabe cómo se evaluará – gbn

+0

@gbn. No sé si MySQL ordena los datos cuando no especifica una cláusula ORDER BY. He probado la solicitud en varias tablas y devolvió la respuesta correcta, así que la publiqué;) – Fred

+0

No hay orden sin una ORDEN POR – gbn

4

"último" puede ser alfabético, tiempo, valor, etc. Es necesario definir que en una simple consulta:

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

pero mi tabla no tiene un 'algunos criterios que definen' algo. –

+0

@gbn No es necesario tener criterios para esta solicitud, creo que podría resolverse construyendo un contador. ¿Me puede dar su opinión sobre mi solicitud? – Fred

3

Ok, por lo que la respuesta a esta pregunta es simplemente NO. MySQL no le proporciona una función incorporada que le permite realizar un seguimiento del orden en que se insertaron los datos.

Se podría añadir una columna que incrementos de vehículos (identificador único) cuando se inserta una fila, o se podría añadir una columna de marca de tiempo para realizar un seguimiento de la hora en que se inserta la fila.

Si no está autorizado para manipular la tabla a continuación, tal vez usted podría agregar una nueva tabla para almacenar la última fila adicional de los datos (pero esto es sólo una mala solución realmente).

+0

Eche un vistazo a mi solicitud;) No está obligado a modificar la estructura de la tabla. – Fred

+0

Siempre se trata de tiempo y dinero. Si obtener los últimos datos agregados vale la pena el tiempo y dinero de reestructurar la tabla, entonces eso es lo que deberían hacer. El mantenimiento y el desarrollo adicional también serían más fáciles y menos costosos si hubiera una identificación con incremento automático en alguna parte. – Niklas

Cuestiones relacionadas