|
Хитрый мерж двух таблиц
|
|||
---|---|---|---|
#18+
Есть две таблицы (срок действия каждого значения ID - С и ПО), одна src_data - это таблица с уже имеющимися данными, другая new_data - это таблица с новыми данными (иногда приходят те же самые данные), PK в двух таблицах это ID+Dt_From. Если значение ID действуют по текущий день, то дату присваивают 2079-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_FROM DT_TO1 3 2020-07-01 2020-07-311 5 2020-08-01 2020-08-311 6 2020-09-01 2020-09-301 7 2020-10-01 2079-01-012 17 2020-10-01 getdate()2 7 getdate()+1 2079-01-013 8 2020-09-01 2020-09-303 18 2020-10-01 2079-01-014 18 2020-07-01 2020-07-314 28 2020-08-01 getdate()4 18 getdate()+1 2079-01-015 20 2020-10-01 2079-01-016 15 2020-06-01 2020-07-316 35 2020-08-01 2079-01-017 9 2020-07-01 2020-07-317 3 2020-08-01 2079-01-019 65 1980-01-01 2079-01-01 ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2020, 19:00 |
|
Хитрый мерж двух таблиц
|
|||
---|---|---|---|
#18+
minya13_85, зачем вы храните "от"-"по", если у вас интервалы без пропусков? Храните только данные "от", этого достаточно. В случае этого способа хранения при вставке вычисления не потребуются. Извлечь указанный результирующий набор данных можно запросом, например, сохранённым в виде представления. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2020, 20:29 |
|
Хитрый мерж двух таблиц
|
|||
---|---|---|---|
#18+
Владислав Колосов, Так хранится в системе. Нужно сделать именно С и ПО ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2020, 00:12 |
|
|
start [/forum/topic.php?desktop=1&fid=46&tid=1685385]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
75ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
others: | 16ms |
total: | 173ms |
0 / 0 |