BorjaPintos / whatthefinances

Aplicación de finanzas personales
Other
0 stars 0 forks source link

Añadir resumen de inversiones #36

Closed BorjaPintos closed 1 month ago

BorjaPintos commented 2 months ago

Este resumen contendrá, la evolución de las aportaciones y valores de inversión mes a mes, tanto en moneda como en porcentaje. Así como un total de precio invertido y valor actual (y rendimientos totales)

BorjaPintos commented 1 month ago

Añado aquí la query que me resuelve los valores mensuales a fin de fecha de cada mes de los productos:

select fp.isin, sum(fp.numero_participaciones) as suma_participaciones, fvc2.max_1, fvc2.valor,  STRFTIME("%Y", fvc2.max_1) as year, STRFTIME("%m", fvc2.max_1) as month, STRFTIME("%d", fvc2.max_1) as day
from finanzas_posiciones fp
join (SELECT fac.isin AS isin, fac.valor as valor ,max(fac.fecha) AS max_1, STRFTIME("%Y", fac.fecha), STRFTIME("%m", fac.fecha) FROM finanzas_valor_participaciones fac 
GROUP BY fac.isin, STRFTIME("%Y", fac.fecha),  STRFTIME("%m", fac.fecha)) fvc2
on fp.isin = fvc2.isin and fp.fecha_compra < fvc2.max_1
where fp.abierta = true
GROUP BY fp.isin, fvc2.max_1
order by fvc2.max_1
BorjaPintos commented 1 month ago

Pego esta query, que muestra las posiciones con la suma de ese mes, más el precio_compra mensual, y el acumulado:

select posiciones_mes.isin, posiciones_mes.suma_participaciones_de_ese_dia, posiciones_mes.precio_compra, posiciones_mes.año, posiciones_mes.mes, sum(posiciones_mes.suma_participaciones_de_ese_dia) over (PARTITION BY posiciones_mes.isin ORDER BY fecha asc) as participaciones_acumuladadas, sum(posiciones_mes.precio_compra) over (PARTITION BY posiciones_mes.isin ORDER BY fecha asc) as precio_compra_acumulado from (select posiciones_dia.isin as isin, sum(posiciones_dia.numero_partipaciones) as suma_participaciones_de_ese_dia, sum(posiciones_dia.precio_compra) as precio_compra, max(posiciones_dia.fecha) as fecha, STRFTIME("%Y", posiciones_dia.fecha) as año, STRFTIME("%m", posiciones_dia.fecha) as mes from (select fp2.isin as isin, fp2.numero_participaciones as numero_partipaciones, fp2.numero_participaciones*fp2.precio_compra_sin_comision as precio_compra, max(fp2.fecha_compra) as fecha, STRFTIME("%Y", fp2.fecha_compra) as año, STRFTIME("%m", fp2.fecha_compra) as mes from finanzas_posiciones fp2 where fp2.isin='IE00BYX5NX33' group by fp2.isin, STRFTIME("%Y", fp2.fecha_compra), STRFTIME("%m", fp2.fecha_compra), STRFTIME("%d", fp2.fecha_compra) order by fp2.fecha_compra desc, fp2.isin desc) posiciones_dia group by posiciones_dia.isin, posiciones_dia.año, posiciones_dia.mes order by posiciones_dia.fecha desc, posiciones_dia.isin desc) posiciones_mes group by posiciones_mes.isin, posiciones_mes.año, posiciones_mes.mes order by posiciones_mes.fecha desc, posiciones_mes.isin desc

Esto vienen a ser 3 "querys"

La primera es la que obtiene los valores de los días:

select fp2.isin, fp2.numero_participaciones as numero_partipaciones, fp2.numero_participaciones*fp2.precio_compra_sin_comision as precio_compra, max(fp2.fecha_compra) as fecha, STRFTIME("%Y", fp2.fecha_compra) as año, STRFTIME("%m", fp2.fecha_compra) as mes from finanzas_posiciones fp2 where fp2.isin='IE00BYX5NX33' group by fp2.isin, STRFTIME("%Y", fp2.fecha_compra), STRFTIME("%m", fp2.fecha_compra), STRFTIME("%d", fp2.fecha_compra) order by fp2.fecha_compra desc, fp2.isin desc

de esa forma tendremos todos los precios_compra de cada día, luego hay que agruparla por mes

select posiciones.isin as isin, sum(posiciones.numero_partipaciones) as suma_participaciones_de_ese_dia, sum(posiciones.precio_compra) as precio_compra, max(posiciones.fecha) as fecha, STRFTIME("%Y", posiciones.fecha) as año, STRFTIME("%m", posiciones.fecha) as mes from (select fp2.isin as isin, fp2.numero_participaciones as numero_partipaciones, fp2.numero_participaciones*fp2.precio_compra_sin_comision as precio_compra, max(fp2.fecha_compra) as fecha, STRFTIME("%Y", fp2.fecha_compra) as año, STRFTIME("%m", fp2.fecha_compra) as mes from finanzas_posiciones fp2 where fp2.isin='IE00BYX5NX33' group by fp2.isin, STRFTIME("%Y", fp2.fecha_compra), STRFTIME("%m", fp2.fecha_compra), STRFTIME("%d", fp2.fecha_compra) order by fp2.fecha_compra desc, fp2.isin desc) posiciones group by posiciones.isin, posiciones.año, posiciones.mes order by posiciones.fecha desc, posiciones.isin desc

finalmente ya podemos hacer el acumulado (que es lo que está en la query de arriba de todo (si lo intentamos hacer en la query anterior suma mal)