Den ursprungliga frågan ger redan den grundläggande informationen per dag för varje användare. Du behöver inte göra om den beräkningen. Lägg bara in frågan i en CTE-term.
Här är kolumnerna som skapas av den ursprungliga frågan:
| date | profit | user_id | amount | percent | total_inv | user_profit |
Det är inte klart vad du vill göra med procent. Jag tror inte att man lätt kan aggregera en om man kommer ihåg vad det värdet representerar.
Något så här (med total_share):
WITH query1 AS (
SELECT s.date, s.profit
, i.user_id, i.amount, i.percent
, SUM(i.amount) OVER (PARTITION BY s.date) AS total_inv
, ROUND(s.profit * (i.percent / 100.0) * i.amount / SUM(i.amount) OVER (PARTITION BY s.date), 2) AS user_profit
, ROUND((1.0 * i.amount / (SUM(i.amount) over (partition by s.date))) * i.percent, 2) AS user_share
FROM daily_stats AS s
JOIN investments AS i
ON s.date BETWEEN i.start_date AND i.end_date
WHERE s.date BETWEEN '2021-02-01' AND '2021-02-05'
)
SELECT date
, MAX(profit) AS profit
, MAX(total_inv) AS total_inv
, SUM(user_profit) AS total_profit
, SUM(user_share) AS total_share
FROM query1
WHERE user_id IN (1, 4)
GROUP BY date
;
Med resultat från fiol:
Fungerande testfall:Testfall med PG V3
Uppdaterade ditt testfall här:Ditt testfall uppdaterat