Заранее спасибо, что нашли время, чтобы прочитать это и, надеюсь, помочь мне найти решение. Я застрял несколько дней на этом (но, кажется, больше).
У меня есть таблица Oracle с 6 основными столбцами:
1. группировка (Char)
2. Номер политики (Char (7) - но числовой с ведущими нулями)
3. Номер обновления (Char (2) - но числовой с ведущими нулями)
4. Номер версии (Char (4) - но числовой с ведущими нулями)
5. Дата вступления в силу
6. Срок годности
Ни один из столбцов не проиндексирован, но это столбец индекса.
Что мне нужно сделать, это:
1. найти все записи, которые в настоящее время действуют ([Срок действия]> Sysdate)
2. найти предыдущий номер политики
Результаты, которые я хотел бы получить:
ID Group Policy Renew Ver PrevID PrevRenew PrevVer
10 A 0001234 04 0003 3 04 0002
22 B 0001111 00 0001 12 00 0000
44 A 0003332 01 0000 31 00 0000
55 C 0003332 28 0010 4 28 0009
Правила:
- что политика и группа всегда остаются неизменными
- несвязанные политики могут существовать в разных группах
- при обновлении политики версия начинается с «0000»
- результаты могут включать действующую в настоящее время политику и другую политику, которая будет эффективной в будущем. предыдущая политика более поздней будет, конечно, текущей
сложная часть, на которой я застреваю, это если Ver равен '0000', и я уменьшаю значение Renew на единицу, чтобы получить PrevRenew, но затем мне нужно получить максимум версии для этого, чтобы получить PrevVer.
Мои попытки создания SQL работали, но они ужасно медленные. Возможно, вы знаете простой и быстрый способ достижения результатов, которые я пытаюсь сделать? Я был бы более чем рад опубликовать, что у меня есть, если это будет полезно.
Большое спасибо!