|
разделить на непересекающиеся интервалы дат отрезки с ссумированием суммы в пересечениях
|
|||
---|---|---|---|
#18+
Добрый день! Есть идеи, как решить следующую задачу на SQL. Есть пересекающиеся интервалы в разрезе атрибута attr с некой суммой - балансом действия в этом интервале. Необходимо разбить на не пересекающиеся интервалы, при этом там где было пересечение нужно сделать новый интервал сложив балансы пересекающихся интервалов. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Результат: ATTR DATE_FROM DATE_TO BALANCE77 28.10.2013 10.03.2014 1077 29.12.2014 06.03.2015 2077 07.03.2015 07.03.2015 3077 08.03.2015 10.03.2015 100 -- на пересечении баланс сложился 77 11.03.2015 14.03.2015 30 -- затем остался равен балансу с строкой id = 377 31.12.2015 07.01.2016 10077 09.01.2016 13.03.2017 60 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2018, 11:25 |
|
разделить на непересекающиеся интервалы дат отрезки с ссумированием суммы в пересечениях
|
|||
---|---|---|---|
#18+
Romael, unpivot+sum over+lead over ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2018, 11:51 |
|
разделить на непересекающиеся интервалы дат отрезки с ссумированием суммы в пересечениях
|
|||
---|---|---|---|
#18+
чуток допилить Код: 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 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2018, 12:13 |
|
разделить на непересекающиеся интервалы дат отрезки с ссумированием суммы в пересечениях
|
|||
---|---|---|---|
#18+
-2-Romael, unpivot+sum over+lead over точно unpivot? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2018, 12:24 |
|
разделить на непересекающиеся интервалы дат отрезки с ссумированием суммы в пересечениях
|
|||
---|---|---|---|
#18+
Romael-2-Romael, unpivot+sum over+lead over точно unpivot? pp as ( ... ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2018, 12:30 |
|
разделить на непересекающиеся интервалы дат отрезки с ссумированием суммы в пересечениях
|
|||
---|---|---|---|
#18+
StaxRomaelпропущено... точно unpivot? pp as ( ... ..... stax это просто как бы размножение строки... ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2018, 12:58 |
|
разделить на непересекающиеся интервалы дат отрезки с ссумированием суммы в пересечениях
|
|||
---|---|---|---|
#18+
RomaelStaxпропущено... pp as ( ... ..... stax это просто как бы размножение строки... інтервальчики надо разбить/обьеденить, для етого обычно start/stop в одну колонку (unpivot) алгоритмы наверное разные есть, но мне так проще Код: 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. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55.
..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2018, 13:06 |
|
разделить на непересекающиеся интервалы дат отрезки с ссумированием суммы в пересечениях
|
|||
---|---|---|---|
#18+
Stax, спасибо, то что нужно! Подпилил, получил искомые данные. Вот, итоговый запрос: Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2018, 14:37 |
|
разделить на непересекающиеся интервалы дат отрезки с ссумированием суммы в пересечениях
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2018, 14:41 |
|
разделить на непересекающиеся интервалы дат отрезки с ссумированием суммы в пересечениях
|
|||
---|---|---|---|
#18+
StaxRomael, імхо, проще из 21524977 убрать пустые интервалы (сумма 0) ..... stax по-моему, там суммы поехали... ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2018, 15:10 |
|
разделить на непересекающиеся интервалы дат отрезки с ссумированием суммы в пересечениях
|
|||
---|---|---|---|
#18+
RomaelStaxRomael, імхо, проще из 21524977 убрать пустые интервалы (сумма 0) ..... stax по-моему, там суммы поехали... не понял какие поехали, имхо, вроде правильно (кроме где 0) но Вам виднее ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2018, 15:50 |
|
разделить на непересекающиеся интервалы дат отрезки с ссумированием суммы в пересечениях
|
|||
---|---|---|---|
#18+
Мне кажется, что решение некорректно, что подтверждается примером: Код: 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. 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. 66.
Получен результат: Код: plsql 1. 2. 3. 4. 5.
В результате потерян интервал с "06.01.2013";"06.01.2013";"???" ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2019, 12:16 |
|
разделить на непересекающиеся интервалы дат отрезки с ссумированием суммы в пересечениях
|
|||
---|---|---|---|
#18+
mediumВ результате потерян интервал с "06.01.2013";"06.01.2013";"???" інтервал длиной 0 21524977 Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
.... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2019, 12:44 |
|
|
start [/forum/topic.php?fid=52&fpage=78&tid=1882552]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
31ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
86ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 170ms |
0 / 0 |