Tengo una tabla de base de datos que registra los movimientos de los usuarios en un juego. Cada vez que se mueven, registro su ID de usuario, el índice de movimiento (incrementa cada fila) y el ID de la zona en la que se encuentran. Tengo un valor especial de índice_de movimiento de -1 para indicar el último movimiento de ese usuario.seleccionar en los resultados de un seleccionar
id user_id move_index zone_id
----------------------------------------------------------------
0 11 0 0
1 11 1 0
2 11 2 0
3 11 -1 3
4 22 0 0
5 22 1 1
6 22 2 1
7 22 -1 3
Quiero hacer dos cosas con SQL:
- detectar todos los usuarios que empezó y terminó en zonas específicas (por ejemplo, se inició en la zona 0 y terminó en la zona 3)
- La extensión de la arriba, detectar a todos los usuarios que comenzaron y terminaron en zonas específicas Y pasaron a través de una zona específica.
Sé cómo hacer esto con múltiples declaraciones SQL & java - pero no sé cómo hacer esto en una sola declaración SQL. ¿Debo hacer una selección y luego seleccionar en los resultados de esta selección?
Gracias - Lo imaginé desde aquí. ¿Es este SQL estándar (es decir, ¿funcionaría también en Oracle?). Y, aparte de los problemas de rendimiento, ¿existe algún límite en la cantidad de SUBCUENTAS que puede hacer? – Kevin
@Kevin Las subconsultas son en casi todos los RDBMS (no estoy seguro de qué estándar son parte de eso). En términos de límites, realmente depende del tamaño/forma de tus datos, pero generalmente trato de no use más de una única subconsulta si es posible. (En muchos casos, un simple [JOIN] (http://dev.mysql.com/doc/refman/5.0/en/join.html), o a veces un [CASE] (http://dev.mysql.com/ doc/refman/5.0/es/case-statement.html) o una tabla temporal puede ser más apropiada.) –
Respuesta muy clara y útil. Gracias por ahorrarme mucho trabajo. – maartenmachiels