Я готовлю некоторые данные для исследовательского проекта, и у меня возникли проблемы со следующей задачей. Если возможно, я хотел бы сделать все с SQL или PL SQL (хотя я настоящий новичок с PL).
Предположим, у нас есть следующая таблица (обратите внимание, что Period_ID — это нужная строка, которую я пытаюсь создать):
+-------+-----------+--------------+--------------+-----------+
| Row # | Person_ID | Code | Date | Period_ID |
+-------+-----------+--------------+--------------+-----------+
| 1 | 1 | Start_period | Jan 1st | 1 |
| 2 | 1 | End_period | Jan 15th | 1 |
| 3 | 1 | Random_code1 | Feb 15th | 1 |
| 4 | 1 | Random_code2 | Feb 28th | 1 |
| 5 | 1 | End_period | March 31st | 1 |
| 6 | 1 | Start_period | May 31st | 2 |
| 7 | 1 | End_period | June 11th | 2 |
| 8 | 1 | End_period | October 28th | 2 |
+-------+-----------+--------------+--------------+-----------+
Столбцы и задача:
- Person_ID: приведенные выше данные относятся к одному человеку (эти данные относятся к уровню транзакции).
- Код: этот код может быть Start_period, End_period или любым случайным кодом. Каждый код Start_period должен иметь соответствующий код End_period. Задача этой задачи состоит в том, чтобы идентифицировать все пары Start/End для создания столбца Period_ID. Один важный нюанс этой задачи: код End_period является INVALID, если он находится в пределах 28 дней кода Start_period. Например, код End_period в строке 2 недействителен, потому что он приходится на 15 января, всего через 14 дней после 1 января. Вместо этого действительный код End_period находится в строке 5, потому что это более чем через 28 дней.
- Дата: дата транзакции.
- Period_ID: требуемая строка — этой информации в данный момент нет в таблице.