Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Como sacar la primera fila de cada bloque

Estas en el tema de Como sacar la primera fila de cada bloque en el foro de Mysql en Foros del Web. Quiero que mediante un select sacar la primera fila de cada bloque el que tiene la menor fecha, olvide poner que esa columa es datetime ...
  #1 (permalink)  
Antiguo 27/06/2017, 01:27
 
Fecha de Ingreso: enero-2011
Mensajes: 49
Antigüedad: 8 años, 10 meses
Puntos: 0
Como sacar la primera fila de cada bloque



Quiero que mediante un select sacar la primera fila de cada bloque el que tiene la menor fecha, olvide poner que esa columa es datetime

Saludos
  #2 (permalink)  
Antiguo 27/06/2017, 08:55
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.404
Antigüedad: 13 años, 2 meses
Puntos: 774
Respuesta: Como sacar la primera fila de cada bloque

Con algo como eso sacas lo que necesitas :)

Código MySQL:
Ver original
  1. select * from tabla as t1
  2. left join (select id, min(fecha) as fecha from tabla group by id) as t2 on (t1.id=t2.id)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 27/06/2017, 09:07
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 12 años, 10 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.
  #4 (permalink)  
Antiguo 27/06/2017, 09:17
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.404
Antigüedad: 13 años, 2 meses
Puntos: 774
Respuesta: Como sacar la primera fila de cada bloque

Cita:
Iniciado por leonardo_josue Ver Mensaje
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.
Cherto cherto, se me paso jejejeje, muchas gracias Leo
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 27/06/2017, 12:49
 
Fecha de Ingreso: enero-2011
Mensajes: 49
Antigüedad: 8 años, 10 meses
Puntos: 0
Respuesta: Como sacar la primera fila de cada bloque

Wow funciona a la perfección... gracias

Saludos

Etiquetas: cada, fecha, fila, primera, select
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:37.