Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Кол-во часов, отработанное бригадой за период
|
|||
|---|---|---|---|
|
#18+
Добрый день, уважаемые форумчане! Помогите новичку! Есть таблица учета времени работы бригады, в которой каждый вид работ учитывается отдельной строкой Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Нужно посчитать общее кол-во часов, отработанное бригадой (то есть в данном примере результатом выборки должно стать кол-во часов 31, см вложение для нагладности) Подскажите плиз, в какую сторону копать? Заранее благодарен! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2018, 02:19 |
|
||
|
Кол-во часов, отработанное бригадой за период
|
|||
|---|---|---|---|
|
#18+
Вложение не вложилось) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2018, 02:20 |
|
||
|
Кол-во часов, отработанное бригадой за период
|
|||
|---|---|---|---|
|
#18+
Гордон Шамуэй, найти разность каждого этупа работ, после чего - посчитать сумму разностей. читать про sum + group by и про арифметику дат... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2018, 05:31 |
|
||
|
Кол-во часов, отработанное бригадой за период
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эх, Интервалы пересекаются, так что простая арифметика не прокатит. По теме подойдёт: Добавить недостающие периоды . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2018, 05:49 |
|
||
|
Кол-во часов, отработанное бригадой за период
|
|||
|---|---|---|---|
|
#18+
Kopelly, опять всё усложняешь..... зачем раскладывать диапазоны в точки, точки собирать в диапазоны, если можно сразу собрать в один покрывающий диапазон кучу пересекающихся? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2018, 06:09 |
|
||
|
Кол-во часов, отработанное бригадой за период
|
|||
|---|---|---|---|
|
#18+
Гордон Шамуэй, ты бы ещё версию сервера огласил, чтобы понимать какие решения у тебя будут работать.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2018, 06:14 |
|
||
|
Кол-во часов, отработанное бригадой за период
|
|||
|---|---|---|---|
|
#18+
Гордон Шамуэй, ладно, будем считать,что у тебя 2012 и выше.... для упрощения демонстрации ВОЗМОЖНОГО варианта решения я внес небольшие изменения в структуру исходной таблицы. Раздельные поля DATE и TIME объединил в целостный DateTime. Но это можно было бы сделать и на уровне запроса, соответствующими преобразованиями, и далее к преобразованным данным применить предложенный запрос... Код: 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. On-line проверка на сайте sqlfiddle.com ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2018, 07:23 |
|
||
|
Кол-во часов, отработанное бригадой за период
|
|||
|---|---|---|---|
|
#18+
Добрый Э - ЭхГордон Шамуэй, ладно, будем считать,что у тебя 2012 и выше.... для упрощения демонстрации ВОЗМОЖНОГО варианта решения я внес небольшие изменения в структуру исходной таблицы . Раздельные поля DATE и TIME объединил в целостный DateTime. Но это можно было бы сделать и на уровне запроса, соответствующими преобразованиями, и далее к преобразованным данным применить предложенный запрос... Код: 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. On-line проверка на сайте sqlfiddle.com Чтобы было понятнее, о чем я.... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2018, 07:29 |
|
||
|
Кол-во часов, отработанное бригадой за период
|
|||
|---|---|---|---|
|
#18+
На 2008 не могу придумать, как сделать короче... Просьба убрать от экранов детей, кошек, беременных и кормящих женщин, и других эмоционально нестабильных личностей Код: 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. 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. 95. 96. 97. 98. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2018, 11:11 |
|
||
|
Кол-во часов, отработанное бригадой за период
|
|||
|---|---|---|---|
|
#18+
Фикс Презерватив на свечку Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2018, 11:18 |
|
||
|
Кол-во часов, отработанное бригадой за период
|
|||
|---|---|---|---|
|
#18+
Руслан ДамировичНа 2008 не могу придумать, как сделать короче... Код: 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. On-line проверка на сайте sqlfiddle.com Но возможно - магия данных. Нужно проверять на рассширенном составе тестовых данных.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2018, 11:53 |
|
||
|
Кол-во часов, отработанное бригадой за период
|
|||
|---|---|---|---|
|
#18+
Добрый Э - ЭхРуслан ДамировичНа 2008 не могу придумать, как сделать короче... Код: 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. On-line проверка на сайте sqlfiddle.com Но возможно - магия данных. Нужно проверять на рассширенном составе тестовых данных.... row_number заменить на dense_rank, конечно же.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2018, 12:00 |
|
||
|
Кол-во часов, отработанное бригадой за период
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эх, При часовом интервале (датавремя начала = датавремя окончания) без пересечений с другими интервалами час работы пропадает: Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2018, 13:15 |
|
||
|
Кол-во часов, отработанное бригадой за период
|
|||
|---|---|---|---|
|
#18+
KopellyПри часовом интервале (датавремя начала = датавремя окончания) без пересечений с другими интервалами час работы пропадает - Видишь час работы? - Не-е-ет. - И я нет. А он есть! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2018, 18:14 |
|
||
|
Кол-во часов, отработанное бригадой за период
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эх, Спасибо огромное вам и остальным участникам! Да, у меня 2012 Не до конца понимаю как оно работает, даже глядя на готовый код( Код: sql 1. - что означает вот это прибавление одного часа например? и вот это тоже: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2018, 01:17 |
|
||
|
Кол-во часов, отработанное бригадой за период
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эх, Чтобы не вносить изменения в структуру таблицы, сделал это в виде представления: Код: sql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2018, 01:21 |
|
||
|
Кол-во часов, отработанное бригадой за период
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эх, Если я правильно понял, нужно погрузиться в изучение оконных функций. Пока что это для меня темный лес( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2018, 01:31 |
|
||
|
Кол-во часов, отработанное бригадой за период
|
|||
|---|---|---|---|
|
#18+
Гордон ШамуэйНе до конца понимаю как оно работает, даже глядя на готовый код( Код: sql 1. - что означает вот это прибавление одного часа например? Исходя из твоего второго поста: час окончания работы засчитывается полностью - то есть работа с 9-00 до 10-00 - это два часа работы. А работа с 9-00 до 9-00 - один час работы. Гордон Шамуэйи вот это тоже: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. Если одна из предыдущих работ окончилась после начала текущей, то ставим 0, иначе 1. Это позволяет проставить 1 для тех работ которые не имеют пересечения с более ранними работами. Потом просуммировав этот флаг по предыдущим работам: Код: sql 1. получим группы интервалов которые пересекаются внутри группы, но пересекаются с другими группами. Взяв максимум и минимум по таким группам получим начала и конец непрерывной работы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2018, 04:28 |
|
||
|
Кол-во часов, отработанное бригадой за период
|
|||
|---|---|---|---|
|
#18+
Гордон ШамуэйДобрый Э - Эх, Если я правильно понял, нужно погрузиться в изучение оконных функций. Пока что это для меня темный лес( Можно и без них, но с ними может быть удобнее писать и значительнее быстрее выполняться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2018, 04:33 |
|
||
|
Кол-во часов, отработанное бригадой за период
|
|||
|---|---|---|---|
|
#18+
Ошибочка: Kopelly получим группы интервалов которые пересекаются внутри группы, но не пересекаются с другими группами. Взяв максимум и минимум по таким группам получим начала и конец непрерывной работы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2018, 04:34 |
|
||
|
Кол-во часов, отработанное бригадой за период
|
|||
|---|---|---|---|
|
#18+
KopellyГордон ШамуэйНе до конца понимаю как оно работает, даже глядя на готовый код( Код: sql 1. - что означает вот это прибавление одного часа например? Исходя из твоего второго поста: час окончания работы засчитывается полностью - то есть работа с 9-00 до 10-00 - это два часа работы. А работа с 9-00 до 9-00 - один час работы.Совершенно верно. У автора каждое значение, по сути - это интервал времени длиной в час. MS SQL server же каждое значение воспринимает как точку. Соответственно, для правильного перевода арифметики дат MS SQL Server-а в арифметику дат топикстартера нужно прибавлять к дате завершения один час. Как вариант, можно было брать datediff между исходными значениями и к результату его работы добавлять единицу: Код: sql 1. 2. 3. 4. Гордон Шамуэйи вот это тоже: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. Этот кусок года помечает все начала непересекающихся групп... Если вспомнить классическое решение Ицика Бен-Гана задачи группировки отрезков , то этот фрагмент кода по логике своей работы эквивалентен поиску всех начал (представление vw_dt_start в статье из ссылки)... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2018, 05:54 |
|
||
|
Кол-во часов, отработанное бригадой за период
|
|||
|---|---|---|---|
|
#18+
Гордон ШамуэйДобрый Э - Эх, Если я правильно понял, нужно погрузиться в изучение оконных функций. Пока что это для меня темный лес(Возможно, прочтение этой книжки позволит научиться ориентироваться в этом лесу.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2018, 06:04 |
|
||
|
Кол-во часов, отработанное бригадой за период
|
|||
|---|---|---|---|
|
#18+
Kopelly, Большое спасибо! Буду разбираться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2018, 18:39 |
|
||
|
Кол-во часов, отработанное бригадой за период
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эх, Уже посмотрел пару видеоуроков по теме. За книжку спасибо, обязательно найду! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2018, 18:40 |
|
||
|
Кол-во часов, отработанное бригадой за период
|
|||
|---|---|---|---|
|
#18+
Kopelly, авторИсходя из твоего второго поста: час окончания работы засчитывается полностью - то есть работа с 9-00 до 10-00 - это два часа работы. А работа с 9-00 до 9-00 - один час работы. Ребята, понял свою исходную ошибку. Конечно же, интервал, например, от 18 до 22 часов - это 4 часа, а не 5. То есть в итоге должно получиться 29 часов, а не 31. Исходя из этого, вот этот кусок года нужно исключить Код: sql 1. И остается вот так? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Тогда запрос выдает результат 29 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2018, 01:35 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39590538&tid=1690396]: |
0ms |
get settings: |
6ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
51ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 223ms |
| total: | 368ms |

| 0 / 0 |
