|
|
|
по дате сгруппировать данные по диапазонам
|
|||
|---|---|---|---|
|
#18+
Добрый день. Подскажите, пожалуйста, новичку. Есть таблица: CREATE TABLE customers_job ( id number(10) NOT NULL, idCstomer number(10) NOT NULL, dDate date NOT NULL, idJob number(10) NOT NULL, idCateg number(10) NOT NULL ); Каждый день по idCustomer создаётся запись с датой dDate c инфой по текущим Job и Categ. Причём сначала он может работать с одним Job и Categ, потом несколько дней с другими, а потом опять с первыми idCustomerdDateidJob idCateg101.01.201711102.01.201711103.01.201721104.01.201711105.01.201721.... 131.01.201721201.01.201722202.01.201732... Нужно сгруппировать данные так, чтобы выбрать диапазоны дат с характеристиками Customer. Например: idCustomerdDate1dDate2idJobidCateg101.01.201702.01.201711103.01.201703.01.201721104.01.201704.01.201711105.01.201731.01.201721201.01.201701.01.201721 .... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2017, 14:20 |
|
||
|
по дате сгруппировать данные по диапазонам
|
|||
|---|---|---|---|
|
#18+
defunct, match recognize ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2017, 14:26 |
|
||
|
по дате сгруппировать данные по диапазонам
|
|||
|---|---|---|---|
|
#18+
oracle 11. match recognize вроде только в 12 появился? Как можно без него старыми методами? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2017, 14:37 |
|
||
|
по дате сгруппировать данные по диапазонам
|
|||
|---|---|---|---|
|
#18+
defunctКак можно без него старыми методами?Ивертируй имя гостя и вбей в поиск. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2017, 14:39 |
|
||
|
по дате сгруппировать данные по диапазонам
|
|||
|---|---|---|---|
|
#18+
На скуль.ру день ото дня всё интересней..... вот уже и шарады с ребусами нужно отгадать для получения ответа на поставленный вопрос... :) что дальше? Конкурс танцев, пение и выразительное чтение стишков? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2017, 15:37 |
|
||
|
по дате сгруппировать данные по диапазонам
|
|||
|---|---|---|---|
|
#18+
Если совсем первое, что приходит в голову, то вот так: with v1 as ( select row_number() over (order by dDate) rn, v.* from customers_job v ), v2 as ( select v1.* , (select min(rn) from v1 v11 where rn<=v1.rn and v11.idCustomer=v1.idCustomer and v11.idJob=v1.idJob and not exists(select 1 from v1 v111 where v111.rn between v11.rn and v1.rn and (v111.idJob!=v1.idJob or v111.idCateg!=v1.idCateg) ) ) upperRn , (select max(rn) from v1 v11 where rn>=v1.rn and v11.idCustomer=v1.idCustomer and v11.idJob=v1.idJob and not exists(select 1 from v1 v111 where v111.rn between v1.rn and v11.rn and (v111.idJob!=v1.idJob or v111.idCateg!=v1.idCateg) ) ) lowerRn from v1 ) select distinct v2.idCustomer, (select ddate from v2 v22 where rn=v2.upperRn) dDate1, (select ddate from v2 v22 where rn=v2.lowerRn) dDate2, v2.idJob, v2.idCateg from v2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2017, 15:49 |
|
||
|
по дате сгруппировать данные по диапазонам
|
|||
|---|---|---|---|
|
#18+
megaexpertАпломб и в имени не соответствует какашке в ответе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2017, 15:57 |
|
||
|
по дате сгруппировать данные по диапазонам
|
|||
|---|---|---|---|
|
#18+
megaexpert, Тебе бы тоже не помешало отгадать ребусную шараду и родить годное решение..... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2017, 15:59 |
|
||
|
по дате сгруппировать данные по диапазонам
|
|||
|---|---|---|---|
|
#18+
Добрый Э - ЭхНа скуль.ру день ото дня всё интересней..... вот уже и шарады с ребусами нужно отгадать для получения ответа на поставленный вопрос... :) что дальше? Конкурс танцев, пение и выразительное чтение стишков? шо не так? вроде все понятно или Вы о finish of group --> start_of_group? ...... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2017, 16:06 |
|
||
|
по дате сгруппировать данные по диапазонам
|
|||
|---|---|---|---|
|
#18+
Staxили Вы о finish of group --> start_of_group?о-га, примерно об этом :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2017, 17:57 |
|
||
|
по дате сгруппировать данные по диапазонам
|
|||
|---|---|---|---|
|
#18+
defunct, megaexpert, Код: 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. online проверка на sqlfiddle.com ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2017, 18:52 |
|
||
|
по дате сгруппировать данные по диапазонам
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эх, большое спасибо за помощь в разгадке ребусов, буду разбираться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2017, 20:37 |
|
||
|
по дате сгруппировать данные по диапазонам
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эх, возможно в partition by idCustomer, idCateg idCateg лишнее ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2017, 10:13 |
|
||
|
по дате сгруппировать данные по диапазонам
|
|||
|---|---|---|---|
|
#18+
спасибо всем за подсказки, idCateg лишнее, т.к. с ним чередующиеся по idCateg диапазоны схлопываются, например, на таком примере первые несколько диапазонов: Код: 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. Воспользовавшись советом решить ту же задачу через start of group, у меня получились правильные диапазоны, но есть сомнения в выделенном тексте. Везде в примерах start-of_group там используется partition by-order by, а у меня так верные диапазоны не выходят - схлопываются. Наверное, нужно какое-то другое условие для определения начала группы? Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2017, 21:26 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39546056&tid=1884971]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
194ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
2ms |
| others: | 241ms |
| total: | 535ms |

| 0 / 0 |
