Bueno mi inquietud es la de como obtener el rank (Posicion) de un usuario dentro de una determianada jerarquia, sabiendo que los datos estan en una base de datos access. Ejemplo: En la base de datos hay 10.000 usuarios cada uno con una determinada experiencia, quiero obtener la posicion del Usuario 3 ordenando de mayor a menor sin tener que hacer un "SELECT * FROM Users ORDER BY Experiencia" y tener que recorrer cada registro para obtener el indece del registro -.-
Usuario: Experiencia:
Usuario 1 500
Usuario 2 358
Usuario 3 589
Usuario 4 955
Usuario 5 1254
Usuario 6 2121
Usuario 7 85
Usuario 8 159
"SELECT * FROM Users ORDER BY Experiencia DESC":
Usuario: Experiencia:
Usuario 6 2121
Usuario 5 1254
Usuario 4 955
Usuario 3 589
Usuario 1 500
Usuario 2 358
Usuario 8 159
Usuario 7 85
Usuario 3 Posicion: 4
Actualmente lo hago de esta manera, pero hay que pedir todos los registros a la base de datos y quiera saber si hay otra forma:
Private Function Obtener_Posicion()
MiRecordset.Open "SELECT * FROM Users ORDER BY Experience DESC", MiConexion, adOpenDynamic, adLockOptimistic
MiRecordset.MoveFirst
MiRecordset.Find "Username = 'Usuario 7266'"
If (MiRecordset.BOF = True) Or (MiRecordset.EOF = True) Then
MsgBox "Usuario no encontrado"
MiRecordset.Close
Exit Function
End If
MsgBox MiRecordset.AbsolutePosition
MsgBox MiRecordset.Fields("Experience")
MiRecordset.Close
End Function
Seleccionar el Usuario con Mayor Experiencia?
En SQL existe la funcion MAX(). vease (http://msdn.microsoft.com/es-es/library/ms187751.aspx)
No, no quiero el que tenga mas experiencia, quiero obtener la posicion del usuario segun su experiencia, asi como en el ejemplo que hize.
Citarquiero obtener la posicion del usuario segun su experiencia
osea algo como un select posicion where experiencia = algo????
no, el lo que quiere es que le devuelvan el numero de la fila en la que se encuentra tal usuario, lo que recomendaria es hacer un Count de los usuarios que estan antes de el, no te armo la consulta porque seguro ni funcionaria (hace mucho que no toco SQL :xD)
SELECT COUNT(*) FROM Users WHERE Experiencia < (ExperienciaUsuario) ORDER BY Experiencia
En experienciaUsuario podes hacer otro select
SELECT COUNT(*) FROM Users WHERE Experiencia < (SELECT Experiencia FROM Users WHERE Id = 2) ORDER BY Experiencia
Espero que te sirva!