MySQL - Consulta Basica

 
Vista:
Imágen de perfil de Miguel Angel

Consulta Basica

Publicado por Miguel Angel (4 intervenciones) el 08/08/2017 01:36:57
Buenas a todos, soy nuevo en el foro y en la programación, quiero saber si me pueden ayudar en un query bien básica

Tengo dos tablas relacionadas y de las dos quiero mostrar información pero de una de ella quiero mostrar el ultimo registro que se agrego

Tabla Servers:
servers

Tabla TotalCount
totalcount


Resultado Esperado
resultado


Para ello estoy sacando la ultima fecha de la tabla totalcont todo bien me muestra el resultado separado por id_ser pero cuando agrego un nuevo campo solo me muestra el ultimo y no los dos por id_ser

1
SELECT nombre_ser, fecha_tot FROM totalcount T INNER JOIN servers S on T.id_servers = S.id_ser WHERE fecha_tot = (SELECT MAX(fecha_tot) from totalcount)

Ojala me puedan ayudar

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
sin imagen de perfil
Val: 953
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Consulta Basica

Publicado por leonardo_josue (414 intervenciones) el 08/08/2017 20:01:59
Hola Miguel Angel:

En realidad no estás tan alejado de una posible solución, sólo hay que afinar unos pequeños detalles... en primer lugar, la subconsulta que haces para obtener la fecha MAXIMA es correcta, sin embargo NO ESTÁS AGRUPANDO POR SERVIDOR, entonces, la consulta quedaría más o menos así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
mysql> SELECT * FROM servers;
+--------+--------------+-----------------+
| id_ser | nombre_ser   | operador_ser    |
+--------+--------------+-----------------+
|      1 | La Rinconada | Miguel Saavedra |
|      2 | La Galilea   | Marcos Gonzalez |
+--------+--------------+-----------------+
2 rows in set (0.00 sec)
 
mysql> SELECT * FROM totalCount;
+--------+------------+------------+-----------+------------+
| id_tot | fecha_tot  | puntos_tot | pesos_tot | id_servers |
+--------+------------+------------+-----------+------------+
|      1 | 2017-08-06 |        100 |      2000 |          1 |
|      2 | 2017-08-07 |         50 |      1000 |          1 |
|      3 | 2017-08-07 |        150 |      3000 |          2 |
+--------+------------+------------+-----------+------------+
3 rows in set (0.00 sec)
 
mysql> SELECT id_servers, MAX(fecha_tot) max_fecha
    -> FROM totalCount
    -> GROUP BY id_servers;
+------------+------------+
| id_servers | max_fecha  |
+------------+------------+
|          1 | 2017-08-07 |
|          2 | 2017-08-07 |
+------------+------------+
2 rows in set (0.00 sec)

Ahora, puedes filtrar en el WHERE utilizando esta consulta, sin embargo, es mejor y más eficiente hacerlo como un INNER JOIN, es decir, algo así:

1
2
3
4
5
6
7
8
9
10
11
12
13
mysql> SELECT nombre_ser, max_fecha FROM
    -> servers
    -> INNER JOIN
    -> ( SELECT id_servers, MAX(fecha_tot) max_fecha
    ->   FROM totalCount
    ->   GROUP BY id_servers) T ON T.id_servers = servers.id_ser;
+--------------+------------+
| nombre_ser   | max_fecha  |
+--------------+------------+
| La Rinconada | 2017-08-07 |
| La Galilea   | 2017-08-07 |
+--------------+------------+
2 rows in set (0.00 sec)

Si quisieras obtener más datos de tu tabla totalCount, puedes hacerlo agregando la tabla como otro INNER JOIN,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
mysql> SELECT nombre_ser, T1.max_fecha, T2.*
    -> FROM
    -> servers
    -> INNER JOIN
    -> ( SELECT id_servers, MAX(fecha_tot) max_fecha
    ->   FROM totalCount
    ->   GROUP BY id_servers) T1 ON T1.id_servers = servers.id_ser
    -> INNER JOIN totalCount T2 ON T1.id_servers = T2.id_servers
    ->                             AND T1.max_fecha = T2.fecha_tot;
+--------------+------------+--------+------------+------------+-----------+------------+
| nombre_ser   | max_fecha  | id_tot | fecha_tot  | puntos_tot | pesos_tot | id_servers |
+--------------+------------+--------+------------+------------+-----------+------------+
| La Rinconada | 2017-08-07 |      2 | 2017-08-07 |         50 |      1000 |      1 |
| La Galilea   | 2017-08-07 |      3 | 2017-08-07 |        150 |      3000 |      2 |
+--------------+------------+--------+------------+------------+-----------+------------+
2 rows in set (0.00 sec)

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
2
Comentar
Imágen de perfil de Miguel Angel

Consulta Basica

Publicado por Miguel Angel (4 intervenciones) el 10/08/2017 00:47:46
Muchas gracias Leo, gente como tu nos inspira a seguir aprendiendo , valoro el tiempo que dedicaste para responder mi pregunta de verdad muchas gracias y si me sirvió y lo mejor de todo es que aprendí :)
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