He intentado escribir una consulta para un sistema de transporte público que generará una lista de rutas cuando ingrese los números de detención de origen y destino.Consultas MySQL anidadas
Aquí está mi tabla de MySQL:
mysql> desc route_timings;
+----------------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+---------+------+-----+---------+----------------+
| ID | int(11) | NO | PRI | NULL | auto_increment |
| route_number | int(11) | NO | | NULL | |
| stop_number | int(11) | NO | | NULL | |
| arrival_time | time | YES | | NULL | |
| departure_time | time | YES | | NULL | |
+----------------+---------+------+-----+---------+----------------+
5 rows in set (0.00 sec)
Éstos son valores de muestra:
mysql> select * from route_timings;
+----+--------------+-------------+--------------+----------------+
| ID | route_number | stop_number | arrival_time | departure_time |
+----+--------------+-------------+--------------+----------------+
| 1 | 54 | 1 | 10:00:00 | 10:05:00 |
| 2 | 54 | 2 | 11:00:00 | 11:05:00 |
| 3 | 54 | 3 | 12:00:00 | 12:05:00 |
| 4 | 55 | 3 | 13:00:00 | 13:05:00 |
| 5 | 55 | 4 | 14:00:00 | 14:05:00 |
| 6 | 55 | 5 | 15:00:00 | 15:05:00 |
| 7 | 60 | 3 | 10:00:00 | 10:05:00 |
| 8 | 60 | 2 | 11:00:00 | 11:05:00 |
| 9 | 60 | 1 | 12:00:00 | 12:05:00 |
+----+--------------+-------------+--------------+----------------+
9 rows in set (0.01 sec)
Mi pregunta es: si quiero enumerar los años ROUTE_NUMBER que contendrían stop_number 1 y stop_number 3, I escribiría una consulta similar a esta:
SELECT DISTINCT `route_number` FROM `route_timings` WHERE `route_number` IN (
SELECT `route_number` FROM `route_timings` WHERE `stop_number`=1
) AND `route_number` IN (
SELECT `route_number` FROM `route_timings` WHERE `stop_number`=3
);
Sin embargo, la consulta anterior solo devolvería los route_numbers que contienen las dos paradas y no las rutas donde la fuente de detención (1) llegaría antes de la parada de destino (3).
La consulta devolvería el siguiente:
+--------------+
| route_number |
+--------------+
| 54 |
| 60 |
+--------------+
El ROUTE_NUMBER 60 no se inicia desde 1 e ir a 3, pero en cambio se inicia a partir del 3 y se dirige a 1. Puede alguien por favor me ayude a añadir que poco a la consulta para que la consulta muestre solo los números de ruta donde la hora de llegada para el número de parada 1 es menor que la hora de llegada para el número de parada 3.
Gracias de antemano. -Shain
Eso era lo que estaba buscando. Muchas gracias. –