SQL: Seleccionar el saldo más reciente por usuarios únicos en un registro de transacciones de tabla.
Tengo una TABLA de registros de saldos transnacionales de la siguiente forma:
TIMESTAMP | Nombre | SALDO
------------------+---------+-----------
1/6/2022 17:57:51 | Usuario_1 | 45
1/6/2022 15:57:27 | Usuario_2 | 15
1/6/2022 12:27:27 | Usuario_1 | 251
1/6/2022 11:17:22 | Usuario_3 | 1500
1/6/2022 10:11:22 | Usuario_2 | 5301
1/6/2022 10:57:18 | Usuario_3 | 2351
1/6/2022 10:23:14 | Usuario_4 | 1542
1/6/2022 10:17:09 | Usuario_4 | 424
Quiero extraer una tabla con la última hora y el último saldo. Intenté:
select
s1.Nombre, s1.SALDO, s1.TIMESTAMP, s2.Email_s2
from
TABLA s1
right join
(select
Nombre, max(TIMESTAMP) as TIMESTAMP
from TABLA
group by Nombre
order by date desc) s2 on s1.Email = s2.Email_s2
where
s1.SALDO is not null
order by
TIMESTAMP desc
Pero la salida sigue mostrando valores duplicados. ¿Alguna sugerencia?
davy.ai
Parece que la consulta que has escrito está utilizando un
RIGHT JOIN
para combinar la subconsulta con la tabla original. Sin embargo, la subconsulta en sí también está seleccionando la columnaName
, lo que significa que la unión no es necesaria en este caso.Aquí tienes una posible modificación de tu consulta que debería eliminar los valores duplicados:
En esta consulta actualizada, he utilizado un
INNER JOIN
entre la tabla original y la subconsulta, lo que significa que solo se devolverán las filas coincidentes. La subconsulta selecciona la columnaName
y el valor máximo detimestamp
para cada nombre. Luego, esta subconsulta se une nuevamente a la tabla original en las columnasName
ytimestamp
. Esto devolverá solo las filas de la tabla original que coinciden con el valor de timestamp máximo para cada nombre.¡Espero que esto te ayude!