SQL - Consulta Devolver máximo registro (Llave compuesta)

   
Vista:

Consulta Devolver máximo registro (Llave compuesta)

Publicado por Jaison (3 intervenciones) el 06/04/2016 23:57:25
Buena tarde:

Tengo una consulta que la verdad no he podido solucionar.

Tengo una tabla de datos TBL_ACTOS , la cual tiene 3 columnas: seqFormulario, numActo y fchActo,
la idea es sacar por cada seqFormulario la mayor fecha y resolucion, es posible que en una misma fecha haya mas de una resolucion, la siguiente imagen tiene unos datos de la tabla TBL_ACTOS y la otra tabla refleja la salida que se necesita.

ayuda

Agradezco la ayuda que me puedan prestar.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
información
Otras secciones de LWP con contenido de SQL
- Código fuente de SQL
- Cursos de SQL
- Temas de SQL
información
Códigos de SQL
- Almacén de datos
- Buscar registros repetidos
- Dias SQL Server

Consulta Devolver máximo registro (Llave compuesta)

Publicado por leonardo_josue (878 intervenciones) el 08/04/2016 21:07:27
Hola Jaison:

La consulta que planteas es una de las más comunes en SQL, en internet hay infinidad de ejemplos, y aquí mismo, en este foro hemos tratado este tipo de consultas muchas veces. Se puede resolver de muchas formas, una de las más simples es utilizando subconsultas para filtrar la información que realmente necesitas:

Supongamos que tienes tu tabla así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
mysql> SELECT * FROM tbl_actos;
+---------------+---------+------------+
| segFormulario | numActo | fchActo    |
+---------------+---------+------------+
|             1 |      18 | 2010-07-22 |
|             1 |       4 | 2015-05-29 |
|             1 |      22 | 2009-06-30 |
|             2 |       3 | 2015-01-28 |
|             2 |       5 | 2009-06-30 |
|             3 |       8 | 2014-07-14 |
|             3 |      16 | 2009-08-03 |
|             4 |       3 | 2015-02-24 |
|             4 |       5 | 2015-02-24 |
|             4 |      14 | 2009-06-30 |
|             5 |      18 | 2015-12-15 |
|             5 |       7 | 2010-12-16 |
+---------------+---------+------------+
12 rows in set (0.00 sec)

A tí te interesa sólo la última fecha, por lo tanto, lo primero que debes hacer es obtener esas fechas para cada uno de los segFormulario, esto lo haces con una agrupación simple y utilizando la función MAX:

1
2
3
4
5
6
7
8
9
10
11
12
13
mysql> SELECT segFormulario, MAX(fchActo) max_fecha
    -> FROM tbl_actos
    -> GROUP BY segFormulario;
+---------------+------------+
| segFormulario | max_fecha  |
+---------------+------------+
|             1 | 2015-05-29 |
|             2 | 2015-01-28 |
|             3 | 2014-07-14 |
|             4 | 2015-02-24 |
|             5 | 2015-12-15 |
+---------------+------------+
5 rows in set (0.00 sec)

Ahora, puedes utilizar esto como una subconsulta para filtrar sólo los registros que correspondan a cada una de las fechas, la forma más simple es hacerlo con un INNER JOIN:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
mysql> SELECT tbl_actos.*
    -> FROM tbl_actos
    -> INNER JOIN
    -> ( SELECT segFormulario, MAX(fchActo) max_fecha
    ->   FROM tbl_actos
    ->   GROUP BY segFormulario
    -> ) T1 ON T1.segFormulario = tbl_actos.segFormulario AND
    ->         T1.max_fecha = tbl_actos.fchActo;
+---------------+---------+------------+
| segFormulario | numActo | fchActo    |
+---------------+---------+------------+
|             1 |       4 | 2015-05-29 |
|             2 |       3 | 2015-01-28 |
|             3 |       8 | 2014-07-14 |
|             4 |       3 | 2015-02-24 |
|             4 |       5 | 2015-02-24 |
|             5 |      18 | 2015-12-15 |
+---------------+---------+------------+
6 rows in set (0.00 sec)

Observa ahora que sólo quedan "repetidos" los casos que comentas en donde una fecha puede tener más de una resolución, entonces simplemente tienes que volver a obtener el MAX valor para el campo NUMACTO, agrupando tanto por segFormulario como por fchActo...

Trata de completar el código, si tienes problemas postea lo que intentaste hacer y con gusto te ayudamos a resolver lo que falte.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar