Ver Mensaje Individual
  #8 (permalink)  
Antiguo 03/05/2011, 09:37
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: estructura de consulta mysql

Hola andruxand:

El problema de utilizar subconsultas en la parte del select tal y como lo comenta alexg88 es que las subconsultas deberán de regresar siempre una columna y un registro

Prueba con esto:

Código MySQL:
Ver original
  1. select distinct T1.id_documento,
  2. T2.fecha as fecha_comunicado,
  3. T3.fecha as fecha_completo
  4. from alertas T1
  5. inner join alertas T2
  6. on T1.id_documento = T2.id_documento and T2.estado = 'comunicado'
  7. inner join alertas T3
  8. on T1.id_documento = T3.id_documento and T3.estado = 'completo'

Aquí me quedaron algunas dudas con respecto a tu información, por ejemplo, si cada id_documento tiene sólo un registro con estatus comunicado y completo, o es posible que tenga más de un registro, así mismo deberías de decirnos si cada id_documento debe tener los dos estatus, o es posible que tenga solo alguno de ellos. Si es este último caso, deberás utilizar LEFT JOIN's en lugar de los INNER JOIN's. te dejo el script completo que utilicé para hacer pruebas:

Código MySQL:
Ver original
  1. mysql> create table alertas (id_documento int, estado varchar(20), fecha datetim
  2. e);
  3. Query OK, 0 rows affected (0.44 sec)
  4.  
  5. mysql> insert into alertas values
  6.     -> (1, 'completo', '2011-03-01'),
  7.     -> (1, 'comunicado', '2011-03-05'),
  8.     -> (2, 'completo', '2011-03-02'),
  9.     -> (2, 'comunicado', '2011-03-04'),
  10.     -> (3, 'completo', '2010-08-14'),
  11.     -> (3, 'comunicado', '2010-12-21');
  12. Query OK, 6 rows affected (0.05 sec)
  13. Records: 6  Duplicates: 0  Warnings: 0
  14.  
  15. mysql> select * from alertas;
  16. +--------------+------------+---------------------+
  17. | id_documento | estado     | fecha               |
  18. +--------------+------------+---------------------+
  19. |            1 | completo   | 2011-03-01 00:00:00 |
  20. |            1 | comunicado | 2011-03-05 00:00:00 |
  21. |            2 | completo   | 2011-03-02 00:00:00 |
  22. |            2 | comunicado | 2011-03-04 00:00:00 |
  23. |            3 | completo   | 2010-08-14 00:00:00 |
  24. |            3 | comunicado | 2010-12-21 00:00:00 |
  25. +--------------+------------+---------------------+
  26. 6 rows in set (0.03 sec)
  27.  
  28. mysql> select distinct T1.id_documento,
  29.     -> T2.fecha as fecha_comunicado,
  30.     -> T3.fecha as fecha_completo
  31.     -> from alertas T1
  32.     -> inner join alertas T2
  33.     -> on T1.id_documento = T2.id_documento and T2.estado = 'comunicado'
  34.     -> inner join alertas T3
  35.     -> on T1.id_documento = T3.id_documento and T3.estado = 'completo';
  36. +--------------+---------------------+---------------------+
  37. | id_documento | fecha_comunicado    | fecha_completo      |
  38. +--------------+---------------------+---------------------+
  39. |            1 | 2011-03-05 00:00:00 | 2011-03-01 00:00:00 |
  40. |            2 | 2011-03-04 00:00:00 | 2011-03-02 00:00:00 |
  41. |            3 | 2010-12-21 00:00:00 | 2010-08-14 00:00:00 |
  42. +--------------+---------------------+---------------------+
  43. 3 rows in set (0.00 sec)