Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Задача: преобразование еженедельных значений в ежемесячные на Oracle SQL.  [new]
ORAMIT
Member

Откуда:
Сообщений: 9
Привет форумчане!

Подобная задача была здесь:
конвертер недель в месяц на SQL
https://www.sql.ru/forum/1159023-1/konverter-nedel-v-mesyac-na-sql


но результат ее решения не верный.

Исходные данные:

описание задачи
Необходимо настроить автоматическое преобразование еженедельных значений в ежемесячные. Продажи в переходных неделях (часть недели в одном месяце, часть в другом) необходимо распределить по будним дням (исключая выходные дни - сб, вск).
В данном примере продажи за неделю, окончившуюся 05.03.2013, необходимо распределить следующим образом 2 дня на февраль, 3 дня на март.



date_week summ
26.02.2013 312.00
05.03.2013 833.00
12.03.2013 225.00
19.03.2013 453.00
26.03.2013 774.00
02.04.2013 719.00
09.04.2013 136.00
16.04.2013 133.00
23.04.2013 157.00
30.04.2013 850.00
07.05.2013 940.00
14.05.2013 933.00
21.05.2013 422.00
28.05.2013 952.00
04.06.2013 136.00
11.06.2013 701.00


TOTAL:
8 676.00

RESULT: данный результат не является правильным!!!

DATE_MONTH total_summ
28.02.2013 550.00
31.03.2013 2 560.57
30.04.2013 1 481.43
31.05.2013 3 305.29
30.06.2013 778.71
31.07.2013 0.00


TOTAL:
8 676,00

Пример: правильный результат за 28.02.2013 = 645,2

Вопрос: как его получить?

Код с тестовыми данными:

create table week_to_month
( 
    date_week date,
    summ number
);

truncate table week_to_month;

insert into week_to_month
values(TO_DATE('2013.02.26', 'yyyy.mm.dd'),312);
insert into week_to_month
values(TO_DATE('2013.03.05', 'yyyy.mm.dd'),833);
insert into week_to_month
values(TO_DATE('2013.03.12', 'yyyy.mm.dd'),225);
insert into week_to_month
values(TO_DATE('2013.03.19', 'yyyy.mm.dd'),453);
insert into week_to_month
values(TO_DATE('2013.03.26', 'yyyy.mm.dd'),774);
insert into week_to_month
values(TO_DATE('2013.04.02', 'yyyy.mm.dd'),719);
insert into week_to_month
values(TO_DATE('2013.04.09', 'yyyy.mm.dd'),136);
insert into week_to_month
values(TO_DATE('2013.04.16', 'yyyy.mm.dd'),133);
insert into week_to_month
values(TO_DATE('2013.04.23', 'yyyy.mm.dd'),157);
insert into week_to_month
values(TO_DATE('2013.04.30', 'yyyy.mm.dd'),850);
insert into week_to_month
values(TO_DATE('2013.05.07', 'yyyy.mm.dd'),940);
insert into week_to_month
values(TO_DATE('2013.05.14', 'yyyy.mm.dd'),933);
insert into week_to_month
values(TO_DATE('2013.05.21', 'yyyy.mm.dd'),422);
insert into week_to_month
values(TO_DATE('2013.05.28', 'yyyy.mm.dd'),952);
insert into week_to_month
values(TO_DATE('2013.06.04', 'yyyy.mm.dd'),136);
insert into week_to_month
values(TO_DATE('2013.06.11', 'yyyy.mm.dd'),701);

commit;
1 фев 17, 17:48    [20170675]     Ответить | Цитировать Сообщить модератору
 Re: Задача: преобразование еженедельных значений в ежемесячные на Oracle SQL.  [new]
ORAMIT
Member

Откуда:
Сообщений: 9
добавлю:

утверждение: НЕ ВЕРНО!


jirniy_vit
Ситуация в том что 26 02 2013(это дата конца недели) продажи на сумму 312 а продажи на конец недели 5 03 2013 - 833
но если мы посмотрим в таблицу результатов то увидим другую сумму а именно 550 это все продажи за февраль
а получилось это вот как

05 03 2013 это воскресенье а понедельник и вторник это 27 и 28 февраля значит 833 \ 7 = 119
26 02 2013 - 312 + (119* 2 ) = 550 итого за февраль

значит к результату за 26 прибавленны продажи за часть недели относящейся к прошлому месяцу
1 фев 17, 17:50    [20170688]     Ответить | Цитировать Сообщить модератору
 Re: Задача: преобразование еженедельных значений в ежемесячные на Oracle SQL.  [new]
Elic
Member

Откуда:
Сообщений: 29979
ORAMIT
как его получить?
Самый простой способ: развернуть неделю в дни, а затем свернуть в месяцы.
1 фев 17, 17:53    [20170699]     Ответить | Цитировать Сообщить модератору
 Re: Задача: преобразование еженедельных значений в ежемесячные на Oracle SQL.  [new]
ORAMIT
Member

Откуда:
Сообщений: 9
Elic,

а как получить зв 28.02.2013 = 645,2 ?

можно просто формулой без sql. Есть решение?
1 фев 17, 18:05    [20170758]     Ответить | Цитировать Сообщить модератору
 Re: Задача: преобразование еженедельных значений в ежемесячные на Oracle SQL.  [new]
Elic
Member

Откуда:
Сообщений: 29979
ORAMIT
можно просто формулой без sql.
sum(summ/5) group by month
1 фев 17, 18:11    [20170776]     Ответить | Цитировать Сообщить модератору
 Re: Задача: преобразование еженедельных значений в ежемесячные на Oracle SQL.  [new]
ORAMIT
Member

Откуда:
Сообщений: 9
Elic
ORAMIT
можно просто формулой без sql.
sum(summ/5) group by month


я предполагал расчет для февраля 28.02.2013 используя цифры -

26.02.2013 312.00
итд.

как в неправильном примере:
автор
05 03 2013 это воскресенье а понедельник и вторник это 27 и 28 февраля значит 833 \ 7 = 119
26 02 2013 - 312 + (119* 2 ) = 550 итого за февраль



можете показать ход вычисления?
1 фев 17, 18:16    [20170791]     Ответить | Цитировать Сообщить модератору
 Re: Задача: преобразование еженедельных значений в ежемесячные на Oracle SQL.  [new]
Elic
Member

Откуда:
Сообщений: 29979
ORAMIT
можете показать ход вычисления?
Ты не понимаешь разницы между "делить на семь" и "делить на пять"
1 фев 17, 18:36    [20170859]     Ответить | Цитировать Сообщить модератору
 Re: Задача: преобразование еженедельных значений в ежемесячные на Oracle SQL.  [new]
ORAMIT
Member

Откуда:
Сообщений: 9
Elic
ORAMIT
можете показать ход вычисления?
Ты не понимаешь разницы между "делить на семь" и "делить на пять"


Исходя из смысла деления целых чисел, мы можем сказать, что если произведение двух целых чисел a и b равно c, то частное от деления c на a равно b, и частное от деления c на b равно a. Приведем пример. Допустим нам известно, что произведение двух целых чисел 5 и −7 равно −35, тогда мы можем сказать, что частное (−35):5 равно −7, а частное (−35):(−7) равно 5.


P.S. Вы не знаете официального формального обращения?

автор
Официально формальное обращение в современном русском языке производится с употреблением местоимения второго лица множественного числа «вы», обращённого к одному респонденту. В письменной речи местоимение «вы», адресованное конкретному собеседнику, в определённых случаях пишется с заглавной буквы.



Я Вас очень прошу, если Вас не затруднит, больше не писать в темах, которыя создаются мною.
1 фев 17, 21:13    [20171211]     Ответить | Цитировать Сообщить модератору
 Re: Задача: преобразование еженедельных значений в ежемесячные на Oracle SQL.  [new]
Гы-гы
Guest
ORAMIT, да кто вас, кретинов обидчивых, сортировать-то будет?
1 фев 17, 21:35    [20171242]     Ответить | Цитировать Сообщить модератору
 Re: Задача: преобразование еженедельных значений в ежемесячные на Oracle SQL.  [new]
Elic
Member

Откуда:
Сообщений: 29979
ORAMIT
Я Вас очень прошу, если Вас не затруднит, больше не писать в темах, которыя создаются мною.
Слишком большая честь для нас.
Специально для особо тупых демонстрирую, что после разложения недель в рабочие дни для февраля получается:
select 312/5+312/5+312/5+312/5+312/5 + 833/5+833/5 from dual;
Ты же сам попросил
ORAMIT
можно просто формулой без sql
2 фев 17, 07:49    [20171820]     Ответить | Цитировать Сообщить модератору
 Re: Задача: преобразование еженедельных значений в ежемесячные на Oracle SQL.  [new]
Plohoy
Guest
Вот с разверткой по дням

with tab_1 as (
select date_week - num_d end_dat
, num_d
, date_week
, summ/5 day_sum
from week_to_month m1
, (select rownum -1 num_d
from dual
connect by level < 8) w1
order by date_week, num_d
)
select last_day(end_dat) month_d
, sum(case when to_char(end_dat, 'D') in (1, 2, 3, 4, 5)
then day_sum
else 0
end) month_s
from tab_1
group by last_day(end_dat)
order by 1
2 фев 17, 09:04    [20171977]     Ответить | Цитировать Сообщить модератору
 Re: Задача: преобразование еженедельных значений в ежемесячные на Oracle SQL.  [new]
Elic
Member

Откуда:
Сообщений: 29979
Plohoy
to_char(end_dat, 'D') in
NLS-говнокод.
Plohoy
level < 8
Незачем генерировать выходные, чтобы потом с ними же неумело сражаться.
2 фев 17, 09:17    [20172057]     Ответить | Цитировать Сообщить модератору
 Re: Задача: преобразование еженедельных значений в ежемесячные на Oracle SQL.  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6727
ORAMIT
Привет форумчане!

Подобная задача была здесь:
конвертер недель в месяц на SQL
https://www.sql.ru/forum/1159023-1/konverter-nedel-v-mesyac-na-sql


но результат ее решения не верный.

Исходные данные:

описание задачи
Необходимо настроить автоматическое преобразование еженедельных значений в ежемесячные. Продажи в переходных неделях (часть недели в одном месяце, часть в другом) необходимо распределить по будним дням (исключая выходные дни - сб, вск).
В данном примере продажи за неделю, окончившуюся 05.03.2013, необходимо распределить следующим образом 2 дня на февраль, 3 дня на март.


оригинальная задача по приведенной ссылке
Необходимо настроить автоматическое преобразование еженедельных значений в ежемесячные. Продажи в
переходных неделях (часть недели в одном месяце, часть в другом) необходимо распределить по
календарным дням.
В данном примере продажи за неделю, окончившуюся 05.03.2013, необходимо распределить следующим
образом 2 дня на февраль, 5 дней на март.


Ну да, ну да.. Неверное решение неверной задачи.

Сударь, у вас собеседование или пересдача?

Уже вторая тема, где вы просите за вас решить задачу из серии "спросили на собеседовании".
2 фев 17, 15:18    [20174024]     Ответить | Цитировать Сообщить модератору
 Re: Задача: преобразование еженедельных значений в ежемесячные на Oracle SQL.  [new]
Вспомнить все
Guest
env,

все мы знаем, что на собеседованиях спрашивают.
+
https://www.sql.ru/forum/1239539-a/
2 фев 17, 15:55    [20174200]     Ответить | Цитировать Сообщить модератору
 Re: Задача: преобразование еженедельных значений в ежемесячные на Oracle SQL.  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6727
Вспомнить все,

а почему не 20144089 ?
2 фев 17, 16:01    [20174219]     Ответить | Цитировать Сообщить модератору
 Re: Задача: преобразование еженедельных значений в ежемесячные на Oracle SQL.  [new]
Гы-ГЫ..
Guest
env
ORAMIT
Привет форумчане!

Подобная задача была здесь:
пропущено...


но результат ее решения не верный.

Исходные данные:

пропущено...


оригинальная задача по приведенной ссылке
Необходимо настроить автоматическое преобразование еженедельных значений в ежемесячные. Продажи в
переходных неделях (часть недели в одном месяце, часть в другом) необходимо распределить по
календарным дням.
В данном примере продажи за неделю, окончившуюся 05.03.2013, необходимо распределить следующим
образом 2 дня на февраль, 5 дней на март.


Ну да, ну да.. Неверное решение неверной задачи.

Сударь, у вас собеседование или пересдача?

Уже вторая тема, где вы просите за вас решить задачу из серии "спросили на собеседовании".


ой Вы уже и тут.

устроили охоту на ведьм?

ну раз у Вас так пригорает. покажу другую точку зрения.

Вы сударь не из тех ли будете, кто открывает вакансии и ворует чужие тестовые задачи?
у вас горит, потомучто придется выдумывать новую задачку...

ну так что бы Вам подобным было не повадно, краденные задачи и публикуются.
2 фев 17, 16:09    [20174251]     Ответить | Цитировать Сообщить модератору
 Re: Задача: преобразование еженедельных значений в ежемесячные на Oracle SQL.  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6727
Гы-ГЫ..,

Широкая у вас лопата сударь. И вентилятор неплохо раскручиваете.

Удивительно, что такая щедрая натура до сих пор не выложила собственный вариант решения. Как и ТС.

з.ы. или это одно лицо....
2 фев 17, 16:16    [20174290]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить