Выберите запрос оплаты графика - PullRequest
0 голосов
/ 18 октября 2019

В графике платежей есть таблица:

| PaySum   | PlanDate   |
+----------+------------+ 
| 23928.38 | 14.10.2019 |
| 24347.13 | 12.11.2019 |
| 24773.20 | 12.12.2020 |
| 25206.73 | 13.01.2020 |   

Нужно вывести предстоящую сумму за 3 месяца

Мой запрос например:

select sum(s.PaySum)
  from L_DEA s
 where s.PlanDate between trunc(sysdate + 1) and
       ADD_months(trunc(sysdate + 1), 3)
   and ID = :iId;    

Этозапрос возвращает 4 месяца, если запустить sysdate = 12.10.19 или 13.10.19
, в остальных случаях правильно показывает в течение 3 месяцев

Как правильно выбрать форму

Ответы [ 4 ]

1 голос
/ 18 октября 2019

Возможно, попробуйте изменить неравенство:

SELECT SUM(s.PaySum)
FROM L_DEA s
WHERE
    s.PlanDate >= TRUNC(SYSDATE) AND
    s.PlanDate < ADD_MONTHS(TRUNC(SYSDATE + 1), 3) AND
    ID = :iId;

Это будет включать все плановые даты в или после полуночи сегодняшнего дня, но до полуночи трех месяцев с этого момента.

0 голосов
/ 18 октября 2019
select s.PlanDate, s.PaySum
  from L_DEA s
 inner join (select PlanDate
               from (select distinct s.PlanDate
                       from L_DEA s
                      where  ID = :iId
                        and s.PlanDate >= (to_date('10.10.2019'))
                      order by s.PlanDate) tt
              where rownum <= 3) A2
    on s.PlanDate = A2.PlanDate
 where ID = :iId);
0 голосов
/ 18 октября 2019

Один сокращенный вариант для охвата периода, начинающегося с the present day до three months, будет:

select sum(s.PaySum)
  from l_dea s
 where s.PlanDate between trunc(systimestamp) and trunc(systimestamp) + interval '3' month
   and ID = :iId
0 голосов
/ 18 октября 2019

Я не согласен с вами. По крайней мере, в данных образца, он работает правильно.

Для 12 октября 2019 года

SQL> with L_DEA (PaySum, PlanDate) as
  2  (select 23928.38 , to_date('14.10.2019','dd.mm.yyyy') from dual union all
  3  select 24347.13 , to_date('12.11.2019','dd.mm.yyyy') from dual union all
  4  select 24773.20 , to_date('12.12.2020','dd.mm.yyyy') from dual union all
  5  select 24773.20 , to_date('10.02.2020','dd.mm.yyyy') from dual union all -- added this
  6  select 25206.73 , to_date('13.01.2020','dd.mm.yyyy') from dual )
  7  select * --sum(s.PaySum)
  8    from L_DEA s
  9   where s.PlanDate between trunc(date '2019-10-12' + 1) and
 10         ADD_months(trunc(date '2019-10-12' + 1), 3)
 11     --and ID = :iId;

    PAYSUM PLANDATE
---------- ---------
  23928.38 14-OCT-19
  24347.13 12-NOV-19
  25206.73 13-JAN-20

SQL>

для другой даты, т.е. 13 октября 2019 года

SQL> with L_DEA (PaySum, PlanDate) as
  2  (select 23928.38 , to_date('14.10.2019','dd.mm.yyyy') from dual union all
  3  select 24347.13 , to_date('12.11.2019','dd.mm.yyyy') from dual union all
  4  select 24773.20 , to_date('12.12.2020','dd.mm.yyyy') from dual union all
  5  select 24773.20 , to_date('10.02.2020','dd.mm.yyyy') from dual union all -- added this
  6  select 25206.73 , to_date('13.01.2020','dd.mm.yyyy') from dual )
  7  select * --sum(s.PaySum)
  8    from L_DEA s
  9   where s.PlanDate between trunc(date '2019-10-13' + 1) and
 10         ADD_months(trunc(date '2019-10-13' + 1), 3)
 11     --and ID = :iId;

    PAYSUM PLANDATE
---------- ---------
  23928.38 14-OCT-19
  24347.13 12-NOV-19
  25206.73 13-JAN-20

SQL>

Ура !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...