I have this table:
CODE | IDNR | NAME | LIMIT |
---|---|---|---|
123 | 80 | XXX | 2019-05 |
123 | 81 | XXX | 2019-10 |
124 | 80 | YYY | 2019-01 |
125 | 80 | ZZZ | 2019-05 |
125 | 81 | ZZZ | 2019-06 |
125 | 80 | ZZZ | 2019-07 |
126 | 80 | III | 2019-05 |
126 | 80 | III | 2019-09 |
126 | 80 | III | 2019-07 |
I want to have a new column (Count-LIMIT ) contain how many LIMIT per code, and another contain YES if the limit are continuous and No if not. MY RESULT that I want like:
CODE | IDNR | NAME | LIMIT | Count-Limit | CON |
---|---|---|---|---|---|
123 | 80 | XXX | 2019-05 | 2 | NO |
123 | 81 | XXX | 2019-10 | 2 | NO |
124 | 80 | YYY | 2019-01 | 1 | NO |
125 | 80 | ZZZ | 2019-05 | 3 | YES |
125 | 81 | ZZZ | 2019-06 | 3 | YES |
125 | 80 | ZZZ | 2019-07 | 3 | YES |
126 | 80 | III | 2019-05 | 3 | NO |
126 | 80 | III | 2019-09 | 3 | NO |
126 | 80 | III | 2019-07 | 3 | NO |
THANKS!
Try this:
WITH T (CODE, IDNR, NAME, LIMIT) AS
(
VALUES
(123, 80, 'XXX', '2019-05')
, (123, 81, 'XXX', '2019-10')
, (124, 80, 'YYY', '2019-01')
, (125, 80, 'ZZZ', '2019-05')
, (125, 81, 'ZZZ', '2019-06')
, (125, 80, 'ZZZ', '2019-07')
, (126, 80, 'III', '2019-05')
, (126, 80, 'III', '2019-09')
, (126, 80, 'III', '2019-07')
)
SELECT
T.*
, COUNT (1) OVER (PARTITION BY CODE) AS COUNT_LIMIT
, DECODE
(
TO_DATE (LIMIT || '-01', 'YYYY-MM-DD')
, COALESCE
(
LAG (TO_DATE (LIMIT || '-01', 'YYYY-MM-DD')) OVER (PARTITION BY CODE ORDER BY LIMIT) + 1 MONTH
, LEAD (TO_DATE (LIMIT || '-01', 'YYYY-MM-DD')) OVER (PARTITION BY CODE ORDER BY LIMIT) - 1 MONTH
)
, 'YES', 'NO'
) AS CON
FROM T
ORDER BY CODE, LIMIT
The result is:
CODE | IDNR | NAME | LIMIT | COUNT_LIMIT | CON |
---|---|---|---|---|---|
123 | 80 | XXX | 2019-05 | 2 | NO |
123 | 81 | XXX | 2019-10 | 2 | NO |
124 | 80 | YYY | 2019-01 | 1 | NO |
125 | 80 | ZZZ | 2019-05 | 3 | YES |
125 | 81 | ZZZ | 2019-06 | 3 | YES |
125 | 80 | ZZZ | 2019-07 | 3 | YES |
126 | 80 | III | 2019-05 | 3 | NO |
126 | 80 | III | 2019-07 | 3 | NO |
126 | 80 | III | 2019-09 | 3 | NO |
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.