2011-04-15 27 views
8

Digamos que tengo una tabla en una base de datos sqlite con dos campos: nombre y edad.Recuperar rango de la tabla sqlite

Bob|40 
Rob|50 
Zek|60 

¿Cómo puedo consultar la tabla SQLite para Zek y determinar que es la más antigua? En términos más generales, supongamos que tengo millones de nombres y edades y deseo consultar una entrada específica, por ejemplo, name = "Juju bear", y buscar el rango de la entrada por un campo diferente, p. ese "oso Juju" ocupa el puesto 133455 (por edad).

Gracias,

Colorado

+4

Me doy cuenta de que proporcionó un ejemplo simplificado, pero almacena la fecha o el año de nacimiento, no la edad per se, y calcula la edad. No almacene la edad en sí. Si no hubiera visto esto hecho bastantes veces, no estaría escribiendo este comentario. – Tim

+0

Buen punto, las edades cambian ¿no? –

Respuesta

16

Se puede utilizar una subconsulta para contar el número de personas con una edad superior, como:

select p1.* 
,  (
     select count(*) 
     from People as p2 
     where p2.age > p1.age 
     ) as AgeRank 
from People as p1 
where p1.Name = 'Juju bear' 
4

respuesta de Andomar es una buena, y debe casi seguro que seguirá siendo la respuesta seleccionada para esta pregunta. Dicho esto ...

me encontré con que una consulta compleja que estaba corriendo rápidamente se convirtió en difícil de manejar cuando traté de clasificarlo en la solución de Andomar, así que por desesperación, he intentado usar algo como el siguiente código:

CREATE TABLE DoughnutShopCountsByHood AS 
SELECT Neighborhood, COUNT(*) AS DoughnutShopCount FROM 
( <<crazy-set-of-painful-subqueries-removed>> ) 
GROUP BY Neighborhood ORDER BY DoughnutShopCount DESC; 

La parte importante es la parte "CREATE TABLE ... AS" en la primera línea. Había planeado que este fuera el primero de algunos pasos, pero al menos en el Administrador de SQLite de Firefox, me sorprendió gratamente descubrir que cuando dejé mi consulta ridículamente larga en una nueva tabla, el RDBMS simplemente agregaba una columna de índice automáticamente. Esta columna se dobla muy bien como una columna de "rango".

Me doy cuenta de que esta es una pregunta muy antigua, por lo que esta respuesta probablemente no contenga ningún voto positivo, pero lo publico en caso de que mi experiencia personal pueda ayudar a alguien más con un desafío similar.

Gracias de nuevo a Andomar por la respuesta original. Me imagino que es la más útil para la mayoría de las personas.

Cuestiones relacionadas