|
|
|
подсчет интервала
|
|||
|---|---|---|---|
|
#18+
Добрый день. Я попробовал найти решение своей задачки в предыдущих форумах, но к сожалению не нашел. Поэтому попробую описать ее кратко и понятно. Имеeтся интервал START_DATE и END_DATE в группе по WORK_ID. Нужно подсчитать разничу в часах между END_DATE и START_DATE для каждой строки. Причем, если интервал пересекается с интервалом предыдущих строк, тогда "пересечение" (наложение) не учитывается (смотри строку с id=2) или учитывается только часть интервала, не попавшая в прересечение (смотри строку с id=3). Если интервалы в пределах одной и тойже группы повторяются (см. строки с id=8 и id=9 ), тогда подсчитывается интервал только для одной, любой строки. Сортировка для подсчета интервала выглядит следующим образом order by START_DATE asc, end_date desc. Т.е. начинается подсчет со самой старой строки по START_DATE, которая имеет наибольший интервал. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Результат, который должен получиться, смотрите в комментариях в with-Clouse. Заранее спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2017, 19:14 |
|
||
|
подсчет интервала
|
|||
|---|---|---|---|
|
#18+
Извените, результат для строки с id= 7 - 3 чaca select 7 id,2 WORK_ID,to_date('21.02.2017 13:00:00','dd.mm.yyyy HH24:MI:SS') START_DATE, to_date('21.02.2017 18:00:00','dd.mm.yyyy HH24:MI:SS') as END_DATE from dual --5 чac 3 чac. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2017, 19:19 |
|
||
|
подсчет интервала
|
|||
|---|---|---|---|
|
#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. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2017, 22:51 |
|
||
|
подсчет интервала
|
|||
|---|---|---|---|
|
#18+
SY, Здорово! чуть-чуть уточню : order by start_date,end_date desc ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2017, 08:58 |
|
||
|
подсчет интервала
|
|||
|---|---|---|---|
|
#18+
fortnet, так SY указал сортировку в Windows partition by work_id order by start_date,end_date ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2017, 10:29 |
|
||
|
подсчет интервала
|
|||
|---|---|---|---|
|
#18+
SY, спасибо большо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2017, 10:35 |
|
||
|
подсчет интервала
|
|||
|---|---|---|---|
|
#18+
SY, а можно усложнить задачу? Сортировка для подсчета интервалов должна быть по следующим критериям order by sort_id,start_date, end_date desc; Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2017, 12:50 |
|
||
|
подсчет интервала
|
|||
|---|---|---|---|
|
#18+
Ожидаемый результат то огласи. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2017, 15:47 |
|
||
|
подсчет интервала
|
|||
|---|---|---|---|
|
#18+
SY, Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Смотри Resultat. Логика та-же самая. Только подсчет интервалов должен начинатся со строчек, у которых sort_id = 1 (order by start_date, end_date desc). Группы так же строяться по work_id При этом известно, что самая минимальная дата min(start_date) от sort_id = 2 >= самой минимальной дате min(start_date) от sort_id = 1 (естественно в своей секции work_id) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2017, 17:36 |
|
||
|
подсчет интервала
|
|||
|---|---|---|---|
|
#18+
SY, И спасибо Вам за помощь! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2017, 17:40 |
|
||
|
подсчет интервала
|
|||
|---|---|---|---|
|
#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. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2017, 19:21 |
|
||
|
подсчет интервала
|
|||
|---|---|---|---|
|
#18+
SY, Круто! Сейчас буду разбираться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2017, 10:47 |
|
||
|
подсчет интервала
|
|||
|---|---|---|---|
|
#18+
fortnet, sorry. Сортировку нужно поправить ORDER BY START_DATE asc, end_date desc ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2017, 15:35 |
|
||
|
подсчет интервала
|
|||
|---|---|---|---|
|
#18+
Дорый день! Предыдущая задача усложнилась. Нужно подсчитать, сколько чистого времени затратил каждый team для ремонта одного объекта WORK_ID. Причем, если интервал времени работы на объекте одного тима пересекается с интервалом другого, тогда интервалы, которые пересекаются, нельзя учитывать при подсчете времени работы следующих тимов. Следующие условия должны быть соблюдены: 1. Подсчет чистого времени работы производится для объекта WORK_ID и тима, который в на этом объекте работал. 2. Пересечение интервалов учитывается только по объекту (WORK_ID), где велась работа (Partition By WORK_ID) 3. При подсчете чистого времени работы важно исключить предыдущие интервалы работы, если они пересекаются. 4. Сортировка для подсчета чистого времени работ одного тима должна производиться по такой схеме Код: plsql 1. 5. Один и тот же тим имеет только одну запись в таблице про объект (PK = WORK_ID, TEAM_ID) Вот пример с ожидаемым результатом DURATION_IN_HOURS Код: 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. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2017, 12:50 |
|
||
|
подсчет интервала
|
|||
|---|---|---|---|
|
#18+
Hans Christian AndersenДорый день! Предыдущая задача усложнилась. Нужно подсчитать, сколько чистого времени затратил каждый team для ремонта одного объекта WORK_ID. Решыл выделить последний вопрос в отдельную тему: "подсчет длительности интервала, исключая предыдущие интервалы" http://www.sql.ru/forum/1274857/podschet-dlitelnosti-intervala-iskluchaya-predydushhie-intervaly ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2017, 12:05 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39412773&tid=1885061]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
188ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
74ms |
get tp. blocked users: |
2ms |
| others: | 241ms |
| total: | 558ms |

| 0 / 0 |
