|
|
|
подсчет длительности интервала, исключая предыдущие интервалы
|
|||
|---|---|---|---|
|
#18+
Дорый день! Нужно подсчитать, сколько чистого времени затратил каждый team для ремонта одного объекта WORK_ID. Причем, если интервал времени работы на объекте одного тима пересекается с интервалом другого, тогда интервалы, которые пересекаются, нельзя учитывать при подсчете времени работы следующих тимов. Следующие условия должны быть соблюдены: 1. Подсчет чистого времени работы производится для объекта WORK_ID и тима, который в на этом объекте работал. 2. Пересечение интервалов учитывается только по объекту (WORK_ID), где велась работа (Partition By WORK_ID) 3. При подсчете чистого времени работы важно исключить предыдущие интервалы работы, если они пересекаются. 4. Сортировка для подсчета чистого времени работ одного тима должна производиться по такой схеме Код: plsql 1. 5. Один и тот же тим имеет только одну запись в таблице про объект Work_ID (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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2017, 12:01 |
|
||
|
подсчет длительности интервала, исключая предыдущие интервалы
|
|||
|---|---|---|---|
|
#18+
Hans Christian AndersenДорый день! Нужно подсчитать, сколько чистого времени затратил каждый team для ремонта одного объекта WORK_ID. Нужно - считай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2017, 12:53 |
|
||
|
подсчет длительности интервала, исключая предыдущие интервалы
|
|||
|---|---|---|---|
|
#18+
Hans Christian Andersen, направте в правильное русло. А я дальше сам... Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2017, 13:01 |
|
||
|
подсчет длительности интервала, исключая предыдущие интервалы
|
|||
|---|---|---|---|
|
#18+
Hans Christian AndersenВот пример с ожидаемым результатом было бы значительно полезнее оставить тут пример исходных данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2017, 13:58 |
|
||
|
подсчет длительности интервала, исключая предыдущие интервалы
|
|||
|---|---|---|---|
|
#18+
проходил мимо..., все исходные данные преведены в примере WORK_ID, team_id, START_DATE, END_DATE, sort_id ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2017, 14:14 |
|
||
|
подсчет длительности интервала, исключая предыдущие интервалы
|
|||
|---|---|---|---|
|
#18+
Без PL/SQL как можно решить эту задачку? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2017, 13:06 |
|
||
|
подсчет длительности интервала, исключая предыдущие интервалы
|
|||
|---|---|---|---|
|
#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. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2017, 13:22 |
|
||
|
подсчет длительности интервала, исключая предыдущие интервалы
|
|||
|---|---|---|---|
|
#18+
Hans Christian Andersen, Набери уже наконец в гугле "пересекающиеся интервалы oracle". Сто раз уже перетиралось, никому это больше не интересно. Хотя может в топик заглянет Добрый Э - Эх и снова всё разжуёт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2017, 13:30 |
|
||
|
подсчет длительности интервала, исключая предыдущие интервалы
|
|||
|---|---|---|---|
|
#18+
dbms_photoshop, если бы нашел, не спрашивал бы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2017, 14:52 |
|
||
|
подсчет длительности интервала, исключая предыдущие интервалы
|
|||
|---|---|---|---|
|
#18+
Hans Christian Andersendbms_photoshop, если бы нашел, не спрашивал бы. С рисунками Объединение временных промежутков .... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2017, 15:36 |
|
||
|
подсчет длительности интервала, исключая предыдущие интервалы
|
|||
|---|---|---|---|
|
#18+
Stax, Спасибо конечно, но задача по ссылке намного проще. Мне нужно отнипать длинну предыдущих отрезков от настоящего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2017, 16:07 |
|
||
|
подсчет длительности интервала, исключая предыдущие интервалы
|
|||
|---|---|---|---|
|
#18+
Hans Christian AndersenStax, Спасибо конечно, но задача по ссылке намного проще. Мне нужно отнипать длинну предыдущих отрезков от настоящего.Вот именно поэтому я тебе не давал конкретную ссылку. Если бы ты ввел запрос и посмотрел результаты с sql.ru - ты бы увидел 124 темы. Из которых в свою очередь могут быть еще ссылки и в целом это покрывает самые разнообразные вариации. Но если человек создает тему просто как code request, то у него манера поведения несколько иная. Ты же не продемонстировал свои попытки решить на SQL. Или хотя бы PL/SQL решение. Из твоего пояснения не особо понятно какую роль в логике играет sort_id или оно только для сортировки выходного набора. Также не смовсем ясно, почему, например, во второй строке результат именно 4. Ну, короче, со стороны всегда видно приложил ли автор достаточно усилий для анализа или решения или просто хочет чтоб все сделали за него. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2017, 16:36 |
|
||
|
подсчет длительности интервала, исключая предыдущие интервалы
|
|||
|---|---|---|---|
|
#18+
Hans Christian Andersen, Если это 20911761 ИСХОДНЫЕ данные, то присмотритесь там есть правильный ответ: Код: plsql 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2017, 16:44 |
|
||
|
подсчет длительности интервала, исключая предыдущие интервалы
|
|||
|---|---|---|---|
|
#18+
Hans Christian AndersenStax, Спасибо конечно, но задача по ссылке намного проще. Мне нужно отнипать длинну предыдущих отрезков от настоящего. что на входе понятно но что получить на выходе мне не очень что значит "исключая предыдущие интервалы", взять последний по ... ? по какому критерию исключать? ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2017, 16:56 |
|
||
|
подсчет длительности интервала, исключая предыдущие интервалы
|
|||
|---|---|---|---|
|
#18+
Stax, 1.....................................................11///////////////////14................. результат-> 3 ч 2...........................................7/////////////////12............................... результат-> 4 ч результат 2 .............................................7///////11........................................... При подсчете длительности интервала, нужно отнимать длительность пересечения данного интервала с предыдущими интервалами. Sort_id служит одним из фактором сортировки интервалов для подсчета длительности. Полные критерии сортировки order by work_id, sort_id,start_date, end_date desc; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2017, 17:17 |
|
||
|
подсчет длительности интервала, исключая предыдущие интервалы
|
|||
|---|---|---|---|
|
#18+
Hans Christian Andersen, сильно не проверял, (схема решения влоб) Код: 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. зы красивше наверное через model/match_recognize ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2017, 18:27 |
|
||
|
подсчет длительности интервала, исключая предыдущие интервалы
|
|||
|---|---|---|---|
|
#18+
dbms_photoshopHans Christian AndersenStax, Спасибо конечно, но задача по ссылке намного проще. Мне нужно отнипать длинну предыдущих отрезков от настоящего.Вот именно поэтому я тебе не давал конкретную ссылку. Если бы ты ввел запрос и посмотрел результаты с sql.ru - ты бы увидел 124 темы. Из которых в свою очередь могут быть еще ссылки и в целом это покрывает самые разнообразные вариации. Но если человек создает тему просто как code request, то у него манера поведения несколько иная. Ты же не продемонстировал свои попытки решить на SQL. Или хотя бы PL/SQL решение. Из твоего пояснения не особо понятно какую роль в логике играет sort_id или оно только для сортировки выходного набора. Также не смовсем ясно, почему, например, во второй строке результат именно 4. Ну, короче, со стороны всегда видно приложил ли автор достаточно усилий для анализа или решения или просто хочет чтоб все сделали за него. Правильно заметил, может быть . А может не быть. Если было бы решение в сети, не писал бы тут. Я посмотрел многие темы в форуме. В основном все темы, на поиск интервалов, которые пересекаються. Теперь по существу, сортировка по следующим критериям order by sort_id,start_date, end_date desc важна при подсчете интервала, т.к. из длительности подсчитываемого интервала подсчитывается по формуле Длина интервала подсчитываемого отрезка = Длина интервала подсчитываемого отрезка - Длина интервала подсчитываемого отрезка, который пересекается с предыдущими интервалами. Поэтому имеет значение, какой интервал первый, второй... 1.....................................................11///////////////////14................. 2...........................................7/////////////////12............................... результат 1.....................................................11///////////////////14................. результат-> 3 ч 2.............................................7///////11......................................... результат-> 4 ч ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2017, 18:47 |
|
||
|
подсчет длительности интервала, исключая предыдущие интервалы
|
|||
|---|---|---|---|
|
#18+
Hans Christian AndersenТеперь по существу, сортировка по следующим критериям order by sort_id,start_date, end_date desc важна при подсчете интервала, т.к. из длительности подсчитываемого интервала подсчитывается по формуле сортировку делал по team_id (t2.team_id<t1.team_id), если надо поменять с учетом "sort_id,start_date, end_date " ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2017, 19:01 |
|
||
|
подсчет длительности интервала, исключая предыдущие интервалы
|
|||
|---|---|---|---|
|
#18+
Stax, спасибо. Выглядит хорошо, но есть ошибка. Код: plaintext Как я уже писал, сортировка выполняется по sort_id,start_date, end_date desc. Но я могу по полям sort_id,start_date, end_date desc создать ranking, который можно использовать как team_id в вашем решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2017, 19:12 |
|
||
|
подсчет длительности интервала, исключая предыдущие интервалы
|
|||
|---|---|---|---|
|
#18+
Stax, а почему у вас результат в первых интервалах по work_id NULL? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2017, 19:18 |
|
||
|
подсчет длительности интервала, исключая предыдущие интервалы
|
|||
|---|---|---|---|
|
#18+
Hans Christian AndersenStax, спасибо. Выглядит хорошо, но есть ошибка. Код: plaintext Как я уже писал, сортировка выполняется по sort_id,start_date, end_date desc. Но я могу по полям sort_id,start_date, end_date desc создать ranking, который можно использовать как team_id в вашем решение. Код: plsql 1. 2. 3. 13-18=5 12-15 c 13-18 -> 13-15=2 10-16 c 13-18 -> 13-16=3 5-2-3=0 ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2017, 09:45 |
|
||
|
подсчет длительности интервала, исключая предыдущие интервалы
|
|||
|---|---|---|---|
|
#18+
Hans Christian AndersenStax, а почему у вас результат в первых интервалах по work_id NULL? добавте nvl(sum,0) ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2017, 09:46 |
|
||
|
подсчет длительности интервала, исключая предыдущие интервалы
|
|||
|---|---|---|---|
|
#18+
StaxHans Christian AndersenStax, спасибо. Выглядит хорошо, но есть ошибка. Код: plaintext Как я уже писал, сортировка выполняется по sort_id,start_date, end_date desc. Но я могу по полям sort_id,start_date, end_date desc создать ranking, который можно использовать как team_id в вашем решение. Код: plsql 1. 2. 3. 13-18=5 12-15 c 13-18 -> 13-15=2 10-16 c 13-18 -> 13-16=3 5-2-3=0 ..... stax C NVL - понятно. Просто спросил почему NULL оставили. Как я уже писал, при подсчете чистого времени работы важно исключить предыдущие интервалы работы. Т.е. исключать нужно только те отрезки времени, которые пересекаются. 1.........................12//////////////15.......................... Результат 3 2...............10//////12..............15////16.................. Результат 3 3...................................................16//////18........ Результат 2 В третий строке отрезок времени между 16 и 18 не пересекается с предыдущими отрезками времени. Поэтому результат в третий строке 2. В этом, для меня, и вся сложность задания. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2017, 11:11 |
|
||
|
подсчет длительности интервала, исключая предыдущие интервалы
|
|||
|---|---|---|---|
|
#18+
Hans Christian Andersen В третий строке отрезок времени между 16 и 18 не пересекается с предыдущими отрезками времени. Поэтому результат в третий строке 2. В этом, для меня, и вся сложность задания. понял, вам надо не отнимать пересекающиеся части, а исключить их один раз аля получить "чистые диапазоны" поденно считать не походит? ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2017, 11:56 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39545126&tid=1885005]: |
0ms |
get settings: |
4ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
145ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
| others: | 206ms |
| total: | 437ms |

| 0 / 0 |
