Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
15.03.2020, 14:06
|
|||
---|---|---|---|
|
|||
sql вопрос |
|||
#18+
Добрый день, Помогите пожалуйста с элигантным решением в SQL, наверно с аналитическими функциями. У меня получается многожтажный аналитический огород и не до конца то что хочу. Кажется что вот вот, но нет :( Задача довольно длинная, но я сдесь сокращу формулирофку и пример: Есть таблица с продажами по дням. Надо выдать непрерывные недельные интервалы (чтобы не было 'пустых недель' без продаж) с общим количеством продаж. Датасет достаточно большой, лет 10 даты, +- 10млн строчек. Но анализируем только 2 последних года. в примере полосочки -- показывают дырку, т.е начало новой серии week - неделя total - количество продаж за неделю with basis as ( select 201846 week, 60 total from dual union -- select 201850 week, 100 total from dual union -- select 201852 week, 70 total from dual union select 201853 week, 80 total from dual union select 201901 week, 100 total from dual union -- select 201903 week, 20 total from dual union select 201904 week, 60 total from dual union -- select 201906 week, 200 total from dual union select 201907 week, 50 total from dual union select 201908 week, 30 total from dual union select 201909 week, 80 total from dual union select 201910 week, 70 total from dual union select 201911 week, 100 total from dual union -- select 201913 week, 80 total from dual union select 201914 week, 20 total from dual union -- select 201916 week, 100 total from dual) select bas.* from basis bas order by bas.week; Желаемый резултат: начало непрерывной серии (начало-конец, 201852-201901, еще лучше), длина серии в неделях, общее количество в серии week_start weeks total 201846 1 60 201850 1 100 201852 3 250 201903 2 80 201906 6 530 201913 2 100 201916 1 100 большое спасибо и хорошего здорового дня, Роман ... |
|||
:
Нравится:
Не нравится:
|
|||
|
15.03.2020, 16:26
|
|||
---|---|---|---|
sql вопрос |
|||
#18+
dbmsoutput, group by global_week - rownum ... |
|||
:
Нравится:
Не нравится:
|
|||
|
15.03.2020, 19:20
|
|||
---|---|---|---|
|
|||
sql вопрос |
|||
#18+
-2- dbmsoutput, group by global_week - rownum Спасибо, но я не понял что имеется ввиду. если можно покажите select ... |
|||
:
Нравится:
Не нравится:
|
|||
|
15.03.2020, 20:21
|
|||
---|---|---|---|
|
|||
sql вопрос |
|||
#18+
dbmsoutput, В жалаемом результате ошибка. Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
15.03.2020, 22:51
|
|||
---|---|---|---|
sql вопрос |
|||
#18+
dbmsoutput, Ты не указал самого главного - что для тебя есть неделя. Вначале я предположил ISO но ISO год 2018 начался в Понедельник 1 Января 2018 и состоит из 52ух недель. Так-что select 201853 week, 80 total from dual union не ISO. Предположу что все-таки ISO и это описка и исключу эту строку: Код: 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.
SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
15.03.2020, 23:04
|
|||
---|---|---|---|
|
|||
sql вопрос |
|||
#18+
SY, БОЛЬШОЕ СПАСИБО! Завтра доберусь до настоящей таблицы и попробую переписать. ... а я огород городил ... искал дырки и аналитически в 6 этажей sql ... и без результата. Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.03.2020, 11:00
|
|||
---|---|---|---|
|
|||
sql вопрос |
|||
#18+
PuM256, Большое спасибо! Я как то так и пытался, но не до пытался. Сейчас буду на реальную таблицу пытаться переписать. Хорошего дня ... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.03.2020, 11:14
|
|||
---|---|---|---|
sql вопрос |
|||
#18+
dbmsoutput PuM256, Большое спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.03.2020, 11:39
|
|||
---|---|---|---|
|
|||
sql вопрос |
|||
#18+
-2-, Согласен, очень верное замечание. Я на данные внимания не обратил, подразумевал сквозную порядковую нумерацию недель. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.03.2020, 13:30
|
|||
---|---|---|---|
|
|||
sql вопрос |
|||
#18+
PuM256, Я посмотрел.... если ошибка имеется ввиду неделя 201853 то да действительно такой не было в 2018 :) Тогда результат должен быть как SY посчитал 201852 2 150 Ваше решение очень красивое, но не видит что 201852 и 201901 идут подряд и дырки там нет. Наверно надо мне использовать логику перевода SY чисел в календарь/'неделю' select 201852 week, 70 total from dual union select 201853 week, 80 total from dual union select 201901 week, 100 total from dual union ... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.03.2020, 13:38
|
|||
---|---|---|---|
sql вопрос |
|||
#18+
dbmsoutput PuM256, Я посмотрел.... если ошибка имеется ввиду неделя 201853 то да действительно такой не было в 2018 :) Как у Вас реально считаются недели 31/12/yyyy может быть первой (не последней в yyyy) неделей yyyy+1 года? 01/01/yyyy всегда первая неделя yyyy года? ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.03.2020, 14:15
|
|||
---|---|---|---|
|
|||
sql вопрос |
|||
#18+
Stax, В датаварехаузе есть DIM_DAY там все дни с неделями в iso week Все траснакции привязаны к DIM_DAY ... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.03.2020, 14:58
|
|||
---|---|---|---|
|
|||
sql вопрос |
|||
#18+
dbmsoutput, чуть подправленное от SY Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.03.2020, 16:02
|
|||
---|---|---|---|
sql вопрос |
|||
#18+
xtender чуть подправленное от SY Начало ISO года + 7 * недель != trunc(Начало календарного года + 7 * недель,'IW') Попробуй например последняя ISO неделя 2023 и первая ISO неделя 2024: Код: 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.
SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.03.2020, 16:44
|
|||
---|---|---|---|
|
|||
sql вопрос |
|||
#18+
SY, Да, опечатка, там 0104 должно быть у меня ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=52&tablet=1&tid=1881460]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 159ms |
0 / 0 |