|
|
|
Сгруппировать записи по дате в диапазоне 10 сек.
|
|||
|---|---|---|---|
|
#18+
Привет, что-то затруднился. Есть выборка, нужно сгруппировать по дате таким образом, чтобы даты в пределах 10 сек попали в одну группу, то есть должно получиться 3 группы iddate1 27.07.10 08:25:15 --группа 11 14.05.14 07:06:29 --группа 21 26.02.18 09:43:21 --группа 31 26.02.18 09:43:23 --группа 31 26.02.18 09:43:25 --группа 31 26.02.18 20:43:25 --группа 4 кто-нибудь знает как это сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 11:01 |
|
||
|
Сгруппировать записи по дате в диапазоне 10 сек.
|
|||
|---|---|---|---|
|
#18+
rigor mortis, match_recognize ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 11:07 |
|
||
|
Сгруппировать записи по дате в диапазоне 10 сек.
|
|||
|---|---|---|---|
|
#18+
rigor mortis, А что являеться стартовым временем для группы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 11:11 |
|
||
|
Сгруппировать записи по дате в диапазоне 10 сек.
|
|||
|---|---|---|---|
|
#18+
MaximaXXL, минимальная дата группы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 11:23 |
|
||
|
Сгруппировать записи по дате в диапазоне 10 сек.
|
|||
|---|---|---|---|
|
#18+
rigor mortis, 26.02.18 23:59:55 и 27.02.18 00:00:03 в одной группе ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 11:30 |
|
||
|
Сгруппировать записи по дате в диапазоне 10 сек.
|
|||
|---|---|---|---|
|
#18+
123йй, да ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 11:37 |
|
||
|
Сгруппировать записи по дате в диапазоне 10 сек.
|
|||
|---|---|---|---|
|
#18+
rigor mortis, Я не очень понимаю, можешь расставить группы? 09:14:52 09:15:01 09:15:02 09:15:03 09:15:05 09:15:07 09:15:09 09:15:11 09:15:12 09:15:13 09:15:14 09:15:15 09:15:23 09:15:24 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 11:45 |
|
||
|
Сгруппировать записи по дате в диапазоне 10 сек.
|
|||
|---|---|---|---|
|
#18+
rigor mortis, А если бы вместо 26.02.18 09:43:25 было бы 26.02.18 09:43:26 это была бы новая группа? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 11:55 |
|
||
|
Сгруппировать записи по дате в диапазоне 10 сек.
|
|||
|---|---|---|---|
|
#18+
ТС имеет в виду, что все группирование начинается с первой даты. Все что входит в "первая дата + 10 сек" - первая группа, +20 сек - вторая группа и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 13:05 |
|
||
|
Сгруппировать записи по дате в диапазоне 10 сек.
|
|||
|---|---|---|---|
|
#18+
шК0ДЕРТС имеет в виду, что все группирование начинается с первой даты. Все что входит в "первая дата + 10 сек" - первая группа, +20 сек - вторая группа и т.д. Решение в Вашей интерпретации тривиально. Но не факт, что интерпретация верна. Если есть перерывы в потоке данных, то может требоваться вариант: +1с +2с +9с +19с +21с +28с +35с +44с Решение в таком сценарии возможно как через sog, так и посредством match_recognize ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 13:14 |
|
||
|
Сгруппировать записи по дате в диапазоне 10 сек.
|
|||
|---|---|---|---|
|
#18+
Не, тут скорее так. Все записи grooup by date. Идём начиная с первой записи: Дата текущей записи становится group_start_date и если текущая дата <= group_start_date + 10 сек. то это группа 1. Иначе дата текущей записи становится group_start_date и это уже группа 2 и заново: если group_start_date <= первая + 10 сек. то это группа 2. и т. д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 13:40 |
|
||
|
Сгруппировать записи по дате в диапазоне 10 сек.
|
|||
|---|---|---|---|
|
#18+
rigor mortis group_start_date и это уже группа 2 и заново: если group_start_date <= первая + 10 сек. то это группа 2. и т. д. До 12с: ищите по форуму метод "start_of_group", примеров обильно. 12с: именно под подобные задачи введен match_recognize ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 13:51 |
|
||
|
Сгруппировать записи по дате в диапазоне 10 сек.
|
|||
|---|---|---|---|
|
#18+
rigor mortisНе, тут скорее так. Все записи grooup by date. тогда мне непонятно почему: 123ййrigor mortis, 26.02.18 23:59:55 и 27.02.18 00:00:03 в одной группе ? rigor mortis123йй, да ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 14:41 |
|
||
|
Сгруппировать записи по дате в диапазоне 10 сек.
|
|||
|---|---|---|---|
|
#18+
rigor mortisИдём начиная с первой записи: Дата текущей записи становится group_start_date и если текущая дата <= group_start_date + 10 сек. то это группа 1. Иначе дата текущей записи становится group_start_date и это уже группа 2 ...Получается, если sysdate больше минимальной даты в таблице, то группы нумеруются с 2 и приведенные в первом посте данные "группа 1" неверны. Остального, кто на ком стоял, не понял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 15:28 |
|
||
|
Сгруппировать записи по дате в диапазоне 10 сек.
|
|||
|---|---|---|---|
|
#18+
rigor mortis, Код: plsql 1. типа такого ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 15:59 |
|
||
|
Сгруппировать записи по дате в диапазоне 10 сек.
|
|||
|---|---|---|---|
|
#18+
with t as (select to_date(regexp_substr(txt, '([^[:space:]]+)', 1, level), 'hh24:mi:ss') time_ FROM (SELECT '09:14:52 09:15:01 09:15:02 09:15:03 09:15:05 09:15:07 09:15:09 09:15:11 09:15:12 09:15:13 09:15:14 09:15:15 09:15:23 09:15:24' AS txt FROM dual) CONNECT BY level <= regexp_count(txt, '([[:space:]]+)') - 1), tt as (select to_date('00:00:00', 'hh24:mi:ss') + (level - 1) * 10 / 86400 begin_ from dual connect by level - 1 <= 8639) select distinct to_char(begin_, 'hh24:mi:ss') begin_, to_char(begin_ + 10 / 86400, 'hh24:mi:ss') end_, count(1) over(partition by begin_) c_ from t, tt where time_ between tt.begin_ and begin_ + 10 / 86400 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 16:07 |
|
||
|
Сгруппировать записи по дате в диапазоне 10 сек.
|
|||
|---|---|---|---|
|
#18+
rigor mortisНе, тут скорее так. Все записи grooup by date. Идём начиная с первой записи: Дата текущей записи становится group_start_date и если текущая дата <= group_start_date + 10 сек. то это группа 1. Иначе дата текущей записи становится group_start_date и это уже группа 2 и заново: если group_start_date <= первая + 10 сек. то это группа 2. и т. д. если < 12-ки я б делал через рекурсивный with по описаному сценарию, Идём начиная с первой записи и ... .... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 16:46 |
|
||
|
Сгруппировать записи по дате в диапазоне 10 сек.
|
|||
|---|---|---|---|
|
#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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 17:12 |
|
||
|
Сгруппировать записи по дате в диапазоне 10 сек.
|
|||
|---|---|---|---|
|
#18+
andrey_anonymous Код: plsql 1. match_number() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 17:22 |
|
||
|
Сгруппировать записи по дате в диапазоне 10 сек.
|
|||
|---|---|---|---|
|
#18+
-2-andrey_anonymous Код: plsql 1. match_number() Я специально сделал так, как сделал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 17:26 |
|
||
|
Сгруппировать записи по дате в диапазоне 10 сек.
|
|||
|---|---|---|---|
|
#18+
andrey_anonymous, Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ps считая match_recognize за правило ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 19:55 |
|
||
|
Сгруппировать записи по дате в диапазоне 10 сек.
|
|||
|---|---|---|---|
|
#18+
Stax Код: plaintext 1. 2. 3. 4. Вот так должно быть поровнее, 20-я секунда в примере уедет в подгруппу +20, где ей и место. Код: plsql 1. Но это детали. Основная идея в следующем: если добавить к примеру Код: plsql 1. 2. 3. 4. то образуются 10-секундные периоды 08:30:45-08:30:54 и 08:30:55-08:31:04, т.е. интервал формируется от лидера группы. Для общего усложнения смысла жизни можно выразиться так: Код: plsql 1. 2. но мне показалось, что это будет сложно осознать без алкоголя и я не стал публиковать :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 20:31 |
|
||
|
Сгруппировать записи по дате в диапазоне 10 сек.
|
|||
|---|---|---|---|
|
#18+
andrey_anonymousStax Код: plaintext 1. 2. 3. 4. Вот так должно быть поровнее, 20-я секунда в примере уедет в подгруппу +20, где ей и место. Код: plsql 1. Но это детали. Основная идея в следующем: если добавить к примеру Код: plsql 1. 2. 3. 4. то образуются 10-секундные периоды 08:30:45-08:30:54 и 08:30:55-08:31:04, т.е. интервал формируется от лидера группы. Для общего усложнения смысла жизни можно выразиться так: Код: plsql 1. 2. но мне показалось, что это будет сложно осознать без алкоголя и я не стал публиковать :) немного не понял Код: 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. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. вторая группа начинается на 16 сек и должна продолжатся до 25(26) сек считаю что для match_recognize правильно и другие решения должны повторить результат ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 21:53 |
|
||
|
Сгруппировать записи по дате в диапазоне 10 сек.
|
|||
|---|---|---|---|
|
#18+
[quot Stax]andrey_anonymousпропущено... немного не понял Я в варианте с аналитикой решил, что достаточно начать формирование непрерывного интервала от простоя >10 сек, каковой разбить на 10-секундные подинтервалы. Staxвторая группа начинается на 16 сек и должна продолжатся до 25(26) сек Ну может и так. Только аналитикой это будет, КМК, совсем сложно сделать - проще pipelined прикруить. Хотя... Одна идейка, возможно, есть. Но уже не сегодня - если руки дойдут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2018, 22:06 |
|
||
|
Сгруппировать записи по дате в диапазоне 10 сек.
|
|||
|---|---|---|---|
|
#18+
andrey_anonymousТолько аналитикой это будет, КМК, совсем сложно сделать - проще pipelined прикруить. Хотя... Одна идейка, возможно, есть. Но уже не сегодня - если руки дойдут. просим, просим. не троллинга ради, но познания для (можно даже не отвечать, если что) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2018, 00:38 |
|
||
|
|

start [/forum/topic.php?fid=52&startmsg=39643115&tid=1883993]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
177ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 252ms |
| total: | 525ms |

| 0 / 0 |
