Salve,
forse ho capito, ma non ci arrivo lo stesso... oppure "non ho capito"
dici:
...
dove impostando nella clausola un valore < 5000 mi restituisca solo le prime 2 righe, ovvero la fattura 3 e 2 e, nel caso ad esempio il valore sia 4.000 solo la fattura 3
non riesco a capire...
viste le fatture
# Anno Valore $aldo
1 2021 1.200 = 1.200
2 2021 1.500 = 2.700
3 2021 3.000 = 5.700
se passi un parametro di "filtro" = 5.000, allora l'unica fattura "sbilanciata" e' la 3/2021, medesimo risultato per 4.000... a mia conoscenza, non avendo un riferimento su Fatture <-> Pagamenti, direi che le prime ad essere pagate saranno le piu' vecchie e non le piu' nuove...
l'unico caso dove apparirebbero le fatture 3/2021 e 2/2021 e' per @parametro <= 2.699...
quindi, ripeto, non mi torna la relazione sui pagamenti.
Prendendo comunque per "buona" la mia pseudo analisi, e con la popolazione indicata, potremmo ad esempio utilizzare un "Running Total", cioe' la generazione di un Totale aggiornato riga per riga, e scartare alla fine del pre-popolamento, tutte le fatture che NON risultino coperte dal parametro in ingresso...
trivialmente,
DECLARE @GiaPagato decimal(18, 4) = 5000;
WITH cteRunningTotal AS (
-- RunningTotal degli addebiti
SELECT Anno,
Numero,
SUM(Totale) OVER (ORDER BY Anno, Numero) AS RunningTotal
FROM Fatture f
),
cteFattureIncluse AS (
-- scarto delle fatture pagate
SELECT c.Anno,
c.Numero
FROM cteRunningTotal c
WHERE RunningTotal > @GiaPagato
)
-- proiezione finale
SELECT f.*
FROM cteFattureIncluse c
-- anche se QUI in questo caso non serve, utilizzo comunque una JOIN su talella Fatture originali
-- perche' probabilmente la tabella originale ha altri attributi che servono in proiezione
JOIN Fatture f ON f.Anno = c.Anno
AND f.Numero = c.Numero
ORDER BY f.Anno DESC, f.Numero DESC;
--<----------
Numero Anno Totale
----------- ----------- ----------
3 2021 3000.0000
se passassi come parametro il valore 2.699 otterremmo
--<----------
Numero Anno Totale
----------- ----------- ---------
3 2021 3000.0000
2 2021 1500.0000
con tutto questo, al di la' dell'aggregazione in windowing function, anche se a me risulta coerente il risultato, probabilmente non ho compreso il tuo scenario...
salutoni romagnoli
--
Andrea