У меня есть две таблицы:
Таблица 1:
| Year | CRN | CID | Cap | | 201910 | 14 | ABC1 | 12 | | 201910 | 15 | ABC1 | 14 | | 201820 | 25 | ABC1 | 15 | | 201820 | 26 | ABC1 | 25 | | 201810 | 43 | ABC1 | 10 | | 201720 | 55 | ABC1 | 11 |
Таблица 2:
| Year | CRN | BLCK | | 201910 | 14 | A1 | | 201910 | 15 | A1 | | 201820 | 25 | B2 | | 201820 | 26 | B2 | | 201810 | 43 | C3 | | 201720 | 55 | C4 | | 201720 | 95 | F5 | | 201710 | 65 | D4 |
Я хочу вернуться:
- CID из таблицы 1 для CRN из таблицы 2. Должен возвращать только один CID, поскольку один год может иметь несколько CRN для одного и того же CID в таблице 1 и для одного и того же BLCK в таблице 2. Например, для 201910 CRN 14 и 15 имеют один и тот же CID ABC1 и один и тот же BLCK A1. Таким образом, он должен вернуть ABC1 один раз.
- Значение BLCK за предыдущий год и сумма значений Cap из таблицы 1 для всех CRN для CID, найденных выше (ABC1) в предыдущем году. 201820 всегда идет после 201810, а значения Year всегда увеличиваются как 201810, 201820, 201910, 201920... Например, для 201910 я должен получить 40 как сумму Cap, потому что для 201820 года есть два CRN для CID ABC1. , Не уверен, что rownumber() всегда будет работать, потому что мне нужно рассмотреть возможность уменьшения года, чтобы вернуться от текущего значения к предыдущему значению.
Я использую Oracle 11g.
Expected Output:
| Year | CID |CurrYear Cap|CurrYear BLCK|Last Year|LastYear Cap|LastYear BLCK| |201910 | ABC1 | 26 | A1 | 201820 | 40 | B2 |