SQL - Ayuda con consulta

 
Vista:
Imágen de perfil de Juan Francisco

Ayuda con consulta

Publicado por Juan Francisco (5 intervenciones) el 04/01/2023 21:26:07
me piden el siguiente reporte:
Identification: cédula en formato de plástico (e.g. X-XXX-XXX)

FirstReloadDate: fecha en la que se le dio la primera carga a un beneficiario (e.g. YYYY-MM-DD)

LastReloadDate: fecha en la que se le dio la última recarga a un beneficiario (e.g. YYYY-MM-DD)

Balance: saldo del beneficiario (e.g. 120.00, 0.99, -100.00)

LastTransactionDate: fecha de la última compra del beneficiario (e.g. YYYY-MM-DD)

PIN: si tiene PIN el beneficiario (true / false, en STRING)

datos que obtengo de dos tablas con la siguiente consulta:

SELECT u.cedula,MIN(m.fecha_transaccion) as PRIMERA_CARGA,MAX(m.fecha_transaccion) as ULTIMA_CARGA,MIN(m.saldo_nuevo) as BALANCE,max(m.fecha_transaccion) AS ULTMA_TRANSACCION,
CASE
WHEN u.pinbeneficiario<>'' THEN 'true'
ELSE 'false'
END AS PIN
FROM movimiento m
INNER JOIN usuario u ON m.id_beneficiario=u.idusuario
WHERE
m.id_beneficiario = 36
AND m.id_programa=1
AND m.tipooperacion='v'

el resultado es correcto en cuanto a lo que la consulta pide, sin embargo para MIN(m.fecha_transaccion) as PRIMERA_CARGA debe mostrar la primera fecha en base a un campo de esa tabla que almacena una C haciendo referencia a la carga inicial, MAX(m.fecha_transaccion) as ULTIMA_CARGA hace referencia a la ultima fecha de tipo C que se ha hecho, max(m.fecha_transaccion) AS ULTMA_TRANSACCION este hace refencia a la fecha de la ultima transaccion de tipo V, y MIN(m.saldo_nuevo) as BALANCE hace referencia a el saldo que le queda que puede basarse en la ultima transaccion de tipo V que se ha realizado.

Cabe resaltar que el unico dato que obtengo de la tabla usuario es el campo cedula
imagen de la tabla movimiento
imagen-de-tabla
Resultado esperado:
imagen-de-tabla-2

USO MARIADB
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 gilman
Val: 184
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Ayuda con consulta

Publicado por gilman (103 intervenciones) el 05/01/2023 09:14:49
prueba:
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
SELECT u.cedula,
       PrimerasCargas.PRIMERA_CARGA,
       UltimasCargas.ULTIMA_CARGA,
       UltimasCargas.BALANCE,
       m.ULTMA_TRANSACCION,
       CASE WHEN u.pinbeneficiario <> '' THEN 'true' ELSE 'false' END AS PIN
  FROM (  SELECT id_beneficiario, MAX (fecha_transaccion) AS ULTMA_TRANSACCION
            FROM movimientos
        GROUP BY id_beneficiario) m
       INNER JOIN usuario u ON m.id_beneficiario = u.idusuario
       INNER JOIN
       (  SELECT id_beneficiario, MIN (fecha_transaccion) AS PRIMERA_CARGA
            FROM movimiento
           WHERE tipooperacion = 'C'
        GROUP BY id_beneficiario) PrimerasCargas
          ON m.id_beneficiario = PrimerasCargas.id_beneficiario
       INNER JOIN
       (  SELECT id_beneficiario,
                 MAX (fecha_transaccion) AS ULTIMA_CARGA,
                 MIN (saldo_nuevo) BALANCE
            FROM movimiento
           WHERE tipooperacion = 'V'
        GROUP BY id_beneficiario) UltimasCargas
          ON m.id_beneficiario = UltimasCargas.id_beneficiario
-- WHERE m.id_beneficiario = 36 AND m.id_programa = 1 AND m.tipooperacion = 'v'

Debería funcionar.
Toma nota que la clausula WHERE está comentada ya que no sé si es para un ejemplo, como en el caso del beneficiario, si no seguramente debería aplicarse en la subselect correspondiente a la tabla m
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
Imágen de perfil de Juan Francisco

Ayuda con consulta

Publicado por Juan Francisco (5 intervenciones) el 05/01/2023 17:46:50
Gracias lo probare y vere el tiempo de ejecucion que le toma te agradezco el apoyo!!!
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