SQL - Desafío de consultas SQL: encontrar los registros más recientes

 
Vista:
sin imagen de perfil

Desafío de consultas SQL: encontrar los registros más recientes

Publicado por BathanF (8 intervenciones) el 04/10/2023 08:06:55
Estoy trabajando en una consulta SQL para una base de datos que contiene registros de transacciones de clientes. Cada transacción tiene un ID de transacción, ID de cliente, fecha de transacción y monto. Necesito encontrar la última transacción para cada cliente.

Aquí hay una versión simplificada de la tabla:

1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE TABLE transactions (
    transaction_id INT PRIMARY KEY,
    customer_id INT,
    transaction_date DATE,
    amount DECIMAL(10, 2)
);
 
INSERT INTO transactions VALUES
    (1, 101, '2023-01-15', 50.00),
    (2, 102, '2023-02-10', 30.00),
    (3, 101, '2023-02-25', 75.00),
    (4, 103, '2023-03-05', 40.00),
    (5, 102, '2023-03-12', 55.00);

Quiero escribir una consulta SQL que recupere la última transacción de cada cliente. En este ejemplo, el resultado esperado incluiría transacciones con id_transacción 3 y 4 porque son las más recientes para los clientes 101 y 103, respectivamente.

¿Podría proporcionar una consulta SQL para lograr esto? Además, sería útil si pudiera explicar la lógica detrás de la consulta y las funciones o técnicas de SQL utilizadas. ¡Gracias por su asistencia!
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
Imágen de perfil de Isaias
Val: 2.542
Oro
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Desafío de consultas SQL: encontrar los registros más recientes

Publicado por Isaias (1921 intervenciones) el 04/10/2023 17:35:27
Con el ORDER BY por la columnas que desees ordenar, ya sea ASC, DESC
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

Desafío de consultas SQL: encontrar los registros más recientes

Publicado por sencillo (1 intervención) el 04/10/2023 18:37:52
Pues no es tan simple como hacer un order by asc o desc

Puedes probarle así:

select T1.* from transactions T1
INNER JOIN
(select customer_id, MAX(transaction_date) AS maximo
from transactions T
group by customer_id) T2
on T1.transaction_date = T2.maximo

Que te debería devolver algo parecido a esto:

3 101 2023-02-25 75
4 103 2023-03-05 40
5 102 2023-03-12 55

Es solo una de muchas formas de hacerlo, ya te tocaría es probar el rendimiento de una u otra forma y analizar cual es menos pesada para el motor
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