|
|
|
Сравнение записей с учетом данных в подчиненной таблице
|
|||
|---|---|---|---|
|
#18+
Есть таблица t1 Код: plsql 1. к ней есть подчиненная таблица t2 Код: plsql 1. Отношение таблиц t1 и t2 один ко многим. Так же есть запрос Код: plsql 1. на основании которого я собираюсь вставлять данные в t1, t2. Но перед вставкой мне хотелось бы сделать 2 вещи: 1. В запросе объединить периоды с одинаковыми данными в один более большой период т.е. два периода для которых dEnd+1 (первого) = dBegin (второго) и все остальные колонки совпадают для всех строк первого и второго периода 2. Проверить что в таблице t1 не существует периода с такими же данными в таблице t2 как те данные что возвращает мой запрос Единственный путь который я пока придумал это преобразовать мой запрос к виду Код: plsql 1. дальше все становится тривиальным, но меня смущает то что результат listagg не может быть больше 4000 символов, а в моем случае это теоретически возможно :( Может есть какой нибудь другой способ? P.S. Результирующий код должен работать в 11.2 и 12.1 и хорошо бы (но не обязательно) в postgresql (там как раз с вариантом агрегации в строку все хорошо). Собственно я рассматривал еще следующие варианты агрегации: 1. wm_concate - не работает в 12.1, 2. Агрегация в json - нет в 11.2 3. Агрегация в xml - сравнение xmltype просто так не работает нужно дополнительное преобразование ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2016, 10:48 |
|
||
|
Сравнение записей с учетом данных в подчиненной таблице
|
|||
|---|---|---|---|
|
#18+
ln123, посчитай crc какой-нибудь и сравнивай ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2016, 11:21 |
|
||
|
Сравнение записей с учетом данных в подчиненной таблице
|
|||
|---|---|---|---|
|
#18+
посчитать crcln123, посчитай crc какой-нибудь и сравнивай Ключевое слово какой-нибудь :), я не знаю агрегирующих функций для расчета crc к тому же поддерживающих либо order by либо не зависящие от порядка поступления данных на вход, а Вы? В общем сейчас набросал еще один вариант решения: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. таким образом, я получу объединение периодов с одинаковыми данными, на а дальше тем же способом отфильтрую те записи которые уже есть в t1, t2 Видимо если кто нибудь не предложит вариант лучше остановлюсь на этом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2016, 12:54 |
|
||
|
Сравнение записей с учетом данных в подчиненной таблице
|
|||
|---|---|---|---|
|
#18+
ln123, по старінке (схлопнуть интервалы) https://groups.google.com/forum/?hl=ru#!topic/fido7.ru.rdbms.oracle/UqO_JFGcb8s p у Вас набор уникальных полей Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. ...... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2016, 19:27 |
|
||
|
Сравнение записей с учетом данных в подчиненной таблице
|
|||
|---|---|---|---|
|
#18+
stax..ln123, по старінке (схлопнуть интервалы) https://groups.google.com/forum/?hl=ru#!topic/fido7.ru.rdbms.oracle/UqO_JFGcb8s p у Вас набор уникальных полей ...... stax Схлопывать интервалы по набору уникальных полей я умею (хотя я это делаю немного иначе чем вы см. мой пост выше), особенность моей ситуации в том что схлопывать нужно по совпадению набора записей в подчиненной таблице. Т.е. набор уникальных полей еще как то получить нужно, в лоб агрегацией строк из подчиненной таблицы в varchar2 не очень хорошо т.к. в 4000 символов помещается только 40 строк, а у меня теоретически может быть больше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2017, 17:28 |
|
||
|
|

start [/forum/search_topic.php?author=hed&author_mode=last_topics&do_search=1]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
190ms |
get topic data: |
11ms |
get first new msg: |
6ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
2ms |
| others: | 718ms |
| total: | 1035ms |

| 0 / 0 |
