Estoy tratando de calcular la suma de pagos usando dos tablas diferentes. Para cada ID, necesito recoger consecutivamente las fechas de la primera tabla y calcular la suma de la cantidad de la segunda tabla.

Ejemplo -

SELECT ID, SUM(AMT) FROM PAYMENT P INNER JOIN DateTable D ON P.ID = D.ID 
WHERE PAYDATE BETWEEN '6/1/2019' AND '2/1/2020'

Entonces debería hacer la misma suma para las próximas dos fechas 1/5/2019 Y 6/1 / 2020-

SELECT ID, SUM(AMT) FROM PAYMENT P INNER JOIN DateTable D ON P.ID = D.ID 
WHERE PAYDATE BETWEEN '5/1/2019' AND '6/1/2020'

Primera tabla - DataTable:

enter image description here

Segunda mesa - Pago:

enter image description here

> Expected Output: 
   ID     Sum 
   111    37    (10+13+14) 
   111    219   (65+45+47+62)
0
Jatin Garg 29 feb. 2020 a las 12:58

2 respuestas

Utilice lag() y join:

select p.id, d.date, sum(p.amt)
from (select d.*,
             lag(date) over (order by date) as prev_date
      from datetable d
     ) d left join
     payment p
     on p.paydate > d.prev_date and
        p.paydate <= date and
        p.id = 111
group by p.id, d.date;
0
Gordon Linoff 29 feb. 2020 a las 12:00

Puede usar UNION ALL para combinar el resultado de estas 2 consultas

SELECT ID, SUM(AMT) FROM PAYMENT P INNER JOIN DateTable D ON P.ID = D.ID 
WHERE PAYDATE BETWEEN '6/1/2019' AND '2/1/2020'
GROUP BY ID

UNION ALL

SELECT ID, SUM(AMT) FROM PAYMENT P INNER JOIN DateTable D ON P.ID = D.ID 
WHERE PAYDATE BETWEEN '5/1/2019' AND '6/1/2020'
GROUP BY ID
0
Squirrel 29 feb. 2020 a las 10:49