Ver Mensaje Individual
  #3 (permalink)  
Antiguo 27/06/2017, 08:07
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Como sacar la primera fila de cada bloque

Con permiso del compañero Libras, hay un pequeño detalle con su consulta y es que en la cláusula ON del JOIN además de poner la condición de igualdad entre los bloques, también debes de filtrar por el fecha, es decir, algo así:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +--------+---------------------+----------+-------+-------+-------+-----------+
  3. | bloque | fecha               | concepto | entra | sale  | saldo | estado    |
  4. +--------+---------------------+----------+-------+-------+-------+-----------+
  5. |      1 | 2017-02-10 00:00:00 | ENTRA    | 10.00 |  NULL | 10.00 | CANCELADO |
  6. |      1 | 2017-02-12 00:00:00 | SALE     |  NULL |  5.00 |  5.00 | CANCELADO |
  7. |      1 | 2017-02-14 00:00:00 | SALE     |  NULL |  2.00 |  3.00 | CANCELADO |
  8. |      1 | 2017-02-15 00:00:00 | ENTRA    |  3.00 |  NULL |  0.00 | CANCELADO |
  9. |      2 | 2017-02-16 00:00:00 | ENTRA    | 31.00 |  NULL | 31.00 | CANCELADO |
  10. |      2 | 2017-02-19 00:00:00 | SALE     |  NULL |  7.00 | 38.00 | CANCELADO |
  11. |      2 | 2017-02-22 00:00:00 | ENTRA    |  1.00 |  NULL | 37.00 | CANCELADO |
  12. |      2 | 2017-02-25 00:00:00 | SALE     |  NULL | 10.00 | 27.00 | CANCELADO |
  13. |      2 | 2017-02-26 00:00:00 | SALE     |  NULL | 27.00 |  0.00 | CANCELADO |
  14. |      3 | 2017-02-28 00:00:00 | ENTRA    | 50.00 |  NULL | 50.00 | CANCELADO |
  15. |      3 | 2017-03-01 00:00:00 | SALE     |  NULL | 25.00 | 25.00 | CANCELADO |
  16. |      3 | 2017-03-02 00:00:00 | SALE     |  NULL | 10.00 | 15.00 | CANCELADO |
  17. |      3 | 2017-03-04 00:00:00 | SALE     |  NULL |  5.00 | 10.00 | CANCELADO |
  18. |      3 | 2017-03-06 00:00:00 | SALE     |  NULL | 10.00 |  0.00 | CANCELADO |
  19. |      0 | 2017-03-09 00:00:00 | ENTRA    | 38.00 |  NULL | 38.00 | PENDIENTE |
  20. |      0 | 2017-03-10 00:00:00 | ENTRA    | 12.00 |  NULL | 40.00 | PENDIENTE |
  21. |      0 | 2017-03-12 00:00:00 | SALE     |  NULL |  7.00 | 33.00 | PENDIENTE |
  22. |      0 | 2017-03-15 00:00:00 | SALE     |  NULL | 10.00 | 23.00 | PENDIENTE |
  23. +--------+---------------------+----------+-------+-------+-------+-----------+
  24. 18 rows in set (0.00 sec)
  25.  
  26. mysql> SELECT T1.*
  27.     -> FROM tabla T1
  28.     -> INNER JOIN
  29.     -> ( SELECT bloque, MIN(fecha) min_fecha
  30.     ->   FROM tabla
  31.     ->   GROUP BY bloque) T2 ON T1.bloque = T2.bloque
  32.     ->                          AND T1.fecha = T2.min_fecha;
  33. +--------+---------------------+----------+-------+------+-------+-----------+
  34. | bloque | fecha               | concepto | entra | sale | saldo | estado    |
  35. +--------+---------------------+----------+-------+------+-------+-----------+
  36. |      1 | 2017-02-10 00:00:00 | ENTRA    | 10.00 | NULL | 10.00 | CANCELADO |
  37. |      2 | 2017-02-16 00:00:00 | ENTRA    | 31.00 | NULL | 31.00 | CANCELADO |
  38. |      3 | 2017-02-28 00:00:00 | ENTRA    | 50.00 | NULL | 50.00 | CANCELADO |
  39. |      0 | 2017-03-09 00:00:00 | ENTRA    | 38.00 | NULL | 38.00 | PENDIENTE |
  40. +--------+---------------------+----------+-------+------+-------+-----------+
  41. 4 rows in set (0.00 sec)

Saludos
Leo.