Ver Mensaje Individual
  #2 (permalink)  
Antiguo 13/07/2011, 13:30
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 18 años, 2 meses
Puntos: 447
Respuesta: Consultar a 2 tablas JOIN

Hola Bier:

Olvidaste mencionar cuál es la estructura de tus tablas, qué campos son llaves y sobre todo el criterio para determinar cuál es el primer movimiento (supongo que será por fecha, pero eso deberías decirlo tú.

En el foro hay muchos ejemplos que pudiera ayudarte, la idea generalmente es la misma, utilizando MIN o MAX (para el primero o el último) y agregarlo como un INNER JOIN adicional, más o menos así:

Código MySQL:
Ver original
  1. mysql> create table TablaA (id_a int, descripcion varchar(20));
  2. Query OK, 0 rows affected (0.25 sec)
  3.  
  4. mysql> insert into TablaA values (1, 'uno'), (2, 'dos'), (3, 'tres');
  5. Query OK, 3 rows affected (0.08 sec)
  6. Records: 3  Duplicates: 0  Warnings: 0
  7.  
  8. mysql> select * from TablaA;
  9. +------+-------------+
  10. | id_a | descripcion |
  11. +------+-------------+
  12. |    1 | uno         |
  13. |    2 | dos         |
  14. |    3 | tres        |
  15. +------+-------------+
  16. 3 rows in set (0.00 sec)
  17.  
  18. mysql> create table TablaB (id_b int, id_a int, fecha date);
  19. Query OK, 0 rows affected (0.06 sec)
  20.  
  21. mysql> insert into TablaB values (1, 1, '2011-03-01'), (2, 1, '2011-01-02'),
  22.     -> (3, 1, '2011-01-01'), (4, 2, '2011-03-04'), (5, 2, '2011-03-05'),
  23.     -> (6, 3, '2011-07-13');
  24. Query OK, 6 rows affected (0.03 sec)
  25. Records: 6  Duplicates: 0  Warnings: 0
  26.  
  27. mysql> select * from TablaB
  28. +------+------+------------+
  29. | id_b | id_a | fecha      |
  30. +------+------+------------+
  31. |    1 |    1 | 2011-03-01 |
  32. |    2 |    1 | 2011-01-02 |
  33. |    3 |    1 | 2011-01-01 |
  34. |    4 |    2 | 2011-03-04 |
  35. |    5 |    2 | 2011-03-05 |
  36. |    6 |    3 | 2011-07-13 |
  37. +------+------+------------+
  38. 6 rows in set (0.00 sec)
  39.  
  40. mysql> select A.*, B.* from TablaA A
  41.     -> inner join TablaB B on A.id_a = B.id_a
  42.     -> inner join
  43.     -> (
  44.     -> select id_a, min(fecha) min_fecha from TablaB group by id_a
  45.     -> ) C
  46.     -> on B.id_a = C.id_a and B.fecha = C.min_fecha;
  47. +------+-------------+------+------+------------+
  48. | id_a | descripcion | id_b | id_a | fecha      |
  49. +------+-------------+------+------+------------+
  50. |    1 | uno         |    3 |    1 | 2011-01-01 |
  51. |    2 | dos         |    4 |    2 | 2011-03-04 |
  52. |    3 | tres        |    6 |    3 | 2011-07-13 |
  53. +------+-------------+------+------+------------+
  54. 3 rows in set (0.00 sec)

Observa que aunque los registros 1 y 2 de la TablaA tienen mas de un registro asociado en la TablaB sólo se está mostrando el primero (de acuerdo a la fecha)

Dale un vistazo a ver si te sirve y si continuas con problemas aclara los puntos que puse al inicio y si es posible pon algunos datos de ejemplo. También podrías poner algo del código que intentaste hacer para ayudarte a afinar la sentencia.

Saludos
Leo.