SQL - Agregar columna de la ultima variable de un grupo de datos

 
Vista:
sin imagen de perfil
Val: 11
Ha aumentado su posición en 14 puestos en SQL (en relación al último mes)
Gráfica de SQL

Agregar columna de la ultima variable de un grupo de datos

Publicado por Jose (7 intervenciones) el 09/01/2020 20:47:22
Hola Amigos, soy muy nuevo en esto. Por favor si es posible su ayuda con algún ejemplo para lo siguiente:
De un grupo de datos, necesito generar una nueva columna (Ultimo Dato) que solo me indique y repita de ser el caso, el ultimo dato del grupo. Según la imagen adjunta o los datos a continuación.

Serie Secuencia Ultimo Dato
A 1 8
A 8 8
B 1 6
B 3 6
B 6 6
C 1 4
C 2 4
C 3 4
C 4 4



Muchas gracias!!!
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

Agregar columna de la ultima variable de un grupo de datos

Publicado por leonardo_josue (1173 intervenciones) el 09/01/2020 21:02:43
Hola José:

Lo que quieres hacer, se puede hacer de muchas formas, la más simple a mi forma de ver, sería con una subconsulta:

supongamos con los datos que tienes, que tu tabla está así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mysql> SELECT * FROM tabla;
+-------+-----------+
| serie | secuencia |
+-------+-----------+
| A     |         1 |
| A     |         8 |
| B     |         1 |
| B     |         3 |
| B     |         6 |
| C     |         1 |
| C     |         2 |
| C     |         3 |
| C     |         4 |
+-------+-----------+
9 rows in set (0.00 sec)


Entonces, si te interesa el último dato de cada grupo, entonces utilizas la función de agrupación MAX:

1
2
3
4
5
6
7
8
9
10
11
mysql> SELECT serie, MAX(secuencia) max_secuencia
    -> FROM tabla
    -> GROUP BY serie;
+-------+---------------+
| serie | max_secuencia |
+-------+---------------+
| A     |             8 |
| B     |             6 |
| C     |             4 |
+-------+---------------+
3 rows in set (0.00 sec)

finalmente, puedes meter esto como una subconsulta para hacer un JOIN simple:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
mysql> SELECT tabla.serie, tabla.secuencia, T.max_secuencia
    -> FROM tabla
    -> INNER JOIN
    -> (
    ->    SELECT serie, MAX(secuencia) max_secuencia
    ->    FROM tabla
    ->    GROUP BY serie
    -> ) T on T.serie = tabla.serie;
+-------+-----------+---------------+
| serie | secuencia | max_secuencia |
+-------+-----------+---------------+
| A     |         1 |             8 |
| A     |         8 |             8 |
| B     |         1 |             6 |
| B     |         3 |             6 |
| B     |         6 |             6 |
| C     |         1 |             4 |
| C     |         2 |             4 |
| C     |         3 |             4 |
| C     |         4 |             4 |
+-------+-----------+---------------+
9 rows in set (0.00 sec)

No nos dices con qué BD's estás trabajando, pero esto es solo SQL estándar y debería de funcionar en cualquiera. Haz la prueba y nos comentas.

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
1
Comentar
sin imagen de perfil
Val: 11
Ha aumentado su posición en 14 puestos en SQL (en relación al último mes)
Gráfica de SQL

Agregar columna de la ultima variable de un grupo de datos

Publicado por Jose (7 intervenciones) el 10/01/2020 12:08:28
Muchas gracias Leo, funciona perfecto!!!
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