Lo pruebas copiando al sentencia y ejecutando en MySQL sin usar PHP, por ejemplo usando el phpMyadmin.wque para eso existe.
Las sentencias de SQL nunca se prueban en un lenguaje de programación en la etapa de desarrollo. Se hacen directamente en la base de datos y luego se las traslada al programa.
Hazlo.
Por otro lado, Para entender la lógica de la consulta sólo debes leer un manual básico de SQL, porque no estoy inventando nada.
Vamos a ver si se entiende la idea.
Primero creamos y cargamos las tablas que imagino tienes:
Código MySQL:
Ver originalQuery OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.05 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
-> );
Query OK, 0 rows affected (0.04 sec)
-> );
Query OK, 0 rows affected (0.05 sec)
-> );
Query OK, 0 rows affected (0.01 sec)
-> );
Query OK, 0 rows affected (0.05 sec)
Query OK, 1 row affected (0.00 sec)
Query OK, 1 row affected (0.00 sec)
Query OK, 1 row affected (0.00 sec)
Query OK, 1 row affected (0.00 sec)
Luego realizamos una consulta solo para verificar lo que coincide entre cada par de tablas:
Código MySQL:
Ver originalmysql
> SELECT A.numero
, 'Altas' Estado
, A.fecha_alta
-> WHERE A.numero
= 123456 -> SELECT F.numero
, 'Fraude' Estado
, F.fecha_alta
-> WHERE F.numero
= 123456 -> SELECT PO.numero
, 'Portabilidad' Estado
, PO.fecha_alta
-> WHERE PO.numero
= 123456;
+--------+--------------+------------+
| numero | Estado | fecha_alta |
+--------+--------------+------------+
| 123456 | Altas | 2015-04-11 |
| 123456 | Fraude | 2015-04-30 |
| 123456 | Portabilidad | 2015-06-03 |
+--------+--------------+------------+
Luego, quiero averiguar solo cual es el ultimo estado:
Código MySQL:
Ver originalmysql
> SELECT numero
, estado
, fecha_alta fecha
-> SELECT A.numero
, 'Altas' Estado
, A.fecha_alta
-> WHERE A.numero
= 123456 -> SELECT F.numero
, 'Fraude' Estado
, F.fecha_alta
-> WHERE F.numero
= 123456 -> SELECT PO.numero
, 'Portabilidad' Estado
, PO.fecha_alta
-> WHERE PO.numero
= 123456) T1
+--------+--------------+------------+
| numero | estado | fecha |
+--------+--------------+------------+
| 123456 | Portabilidad | 2015-06-03 |
+--------+--------------+------------+
Todo esto es SQL bastante básico. Es de manual.
Ahora bien, supongamos que en lugar de tener los datos en las cuatro tablas, solo está la maestra (PREPAGO), y la de fraude.
Entonces la consulta simple ya devuelve lo necesario:
Código MySQL:
Ver originalmysql
> SELECT A.numero
, 'Altas' Estado
, A.fecha_alta
-> WHERE A.numero
= 123456 -> SELECT F.numero
, 'Fraude' Estado
, F.fecha_alta
-> WHERE F.numero
= 123456 -> SELECT PO.numero
, 'Portabilidad' Estado
, PO.fecha_alta
-> WHERE PO.numero
= 123456; +--------+--------+------------+
| numero | Estado | fecha_alta |
+--------+--------+------------+
| 123456 | Fraude | 2015-04-30 |
+--------+--------+------------+
El comportamiento de las consultas depende de como se contruyan los datos, y como la realcies.