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

 
Vista:
sin imagen de perfil
Val: 10
Ha disminuido su posición en 9 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 (6 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 (1172 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: 10
Ha disminuido su posición en 9 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 (6 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