|
получить таблицу вида
|
|||
---|---|---|---|
#18+
Есть две таблицы (срок действия каждого значения ID - С и ПО), одна src_data - это таблица с уже имеющимися данными, другая new_data - это таблица с новыми данными (иногда приходят те же самые данные), PK в двух таблицах это ID+Dt_From. Если значение ID действуют по текущий день, то дату присваивают 4444-01-01. Начальная дата иногда определена, иногда нет и она = 1980-01-01. Вот пример двух таблиц Код: sql 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. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65.
Как сделать MERGE двух таблиц? Если к ID пришло новое значение и мы не знаем дату открытия (1980-01-01), то предыдущую запись закрываем текущей датой, а новую запись начинаем +1 день от текущей, а если знаем дату открытия след записи, то предыдущую запись закрываем -1 день от даты открытия новой записи. В итоге должны получить таблицу вида ID VAL DT_FROMDT_TO132020-07-012020-07-31152020-08-012020-08-31162020-09-012020-09-30172020-10-014444-01-012172020-10-01trunc(sysdate)27trunc(sysdate)+14444-01-01382020-09-012020-09-303182020-10-014444-01-014182020-07-012020-07-314282020-08-01trunc(sysdate)418trunc(sysdate)+14444-01-015202020-10-014444-01-016152020-06-012020-07-316352020-08-014444-01-01792020-07-012020-07-31732020-08-014444-01-019651980-01-014444-01-01 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2020, 21:17 |
|
|
start [/forum/topic.php?fid=52&msg=40020905&tid=1880685]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
63ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
2ms |
others: | 301ms |
total: | 445ms |
0 / 0 |