Как зациклить в Oracle SQL - PullRequest
       0

Как зациклить в Oracle SQL

1 голос
/ 30 сентября 2019

Предположим, у нас есть exampleDB и выберите контрактную дату, например

SELECT DB.contractdate FROM exampleDB DB

contractdate 
2014/12/1
2015/12/1
2016/12/1
2017/12/1
2018/12/1
2019/12/1

Я бы хотел посчитать номер политики каждый раз, как

each time   policy count
2014/1/1       0
2015/1/1       1
2016/1/1       2
2017/1/1       3
2018/1/1       4
2019/1/1       5

Я пытался

WHERE DB.contractdate <='2014/1/1';

Но я должен зациклить такой код вручную. Как я могу зациклить?

Если биннинг происходит каждый месяц, это очень напряженный процесс.

можно ли их объединить в одну?

С уважением

Ответы [ 3 ]

1 голос
/ 30 сентября 2019
select contractdate as "each time",
       count(*) as "policy count" 
  from exampleDB 
where contractdate in (mention all dates you want)
group by contractdate

Надеюсь, это поможет вам.

1 голос
/ 30 сентября 2019

Вы можете использовать аналитическую функцию COUNT с оператором RANGE следующим образом:

SQL> with dataa(contractdate) as
  2  (
  3  select date '2014-12-01' from dual union all
  4  select date '2015-12-01' from dual union all
  5  select date '2016-12-01' from dual union all
  6  select date '2017-12-01' from dual union all
  7  select date '2018-12-01' from dual union all
  8  select date '2019-12-01' from dual
  9  )
 10  SELECT
 11      TRUNC(CONTRACTDATE, 'year') as "each time",
 12      COUNT(1) OVER(
 13          ORDER BY
 14              CONTRACTDATE DESC
 15          RANGE BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING
 16      ) as "policy count"
 17  FROM
 18      DATAA order by 1;

each time policy count
--------- ------------
01-JAN-14            0
01-JAN-15            1
01-JAN-16            2
01-JAN-17            3
01-JAN-18            4
01-JAN-19            5

6 rows selected.

SQL>

Приветствия !!

1 голос
/ 30 сентября 2019

вы можете использовать row_num() и trunc(), чтобы получить 1-й день месяца

SELECT TRUNC(DB.contractdate, 'MONTH'), row_number() over (order by DB.contractdate) -1 as policy_count
FROM exampleDB DB
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...