+ 1

По выручке за неделю получить выручку за месяц

Используя SQL (любой диалект) получить выручку за месяц из выручки за неделю, учитывая, что сб и вс - выходные, а недели могут быть переходными из одного месяца в другой. Пример данных: Дата. Сумма 07.01.2019 567,00 14.01.2019 598,00 21.01.2019 768,00 28.01.2019 679,00 04.02.2019 570,00 11.02.2019 456,00

1st Feb 2019, 5:52 AM
Виталий Аникин
Виталий Аникин - avatar
9 Antworten
+ 1
Try this.. SELECT DATE_FORMAT(date, "%Y") Year, DATE_FORMAT(date, "%W") Month, SUM(amount) 'Weekly Amount' FROM docs GROUP BY WEEK(DATE, 3), YEAR(date);
1st Feb 2019, 12:36 PM
Calviղ
Calviղ - avatar
0
Варианты на python тоже подойдут)))
1st Feb 2019, 5:59 AM
Виталий Аникин
Виталий Аникин - avatar
0
Это не ежедневные данные, это первые дни недели и данные за неделю. За день все как раз очевидно, ваше решение работает за день нормально.
1st Feb 2019, 11:21 AM
Виталий Аникин
Виталий Аникин - avatar
0
Извините, я не очень понимаю, что вы имеете в виду. Если вам нужны еженедельные данные, вы можете изменить месяц month(дата) на еженедельный week(дата, 3). (I'm sorry, I don't really understand what you mean. If you need weekly data, you could change month(date) to week(date, 3).)
1st Feb 2019, 11:38 AM
Calviղ
Calviղ - avatar
0
В наличии есть данные за неделю (в первой строчке примера за 5 дней начиная с 07.01.2019 было продано товаров на 567,00. Пять дней, т. к. Сб и вс - выходные дни)
1st Feb 2019, 11:41 AM
Виталий Аникин
Виталий Аникин - avatar
0
Perhaps you show your expected output result in table. I try to understand what you want then.
1st Feb 2019, 11:45 AM
Calviղ
Calviղ - avatar
0
Дата в тестовой таблице означает начало недели за которую была получена выручка. (The date in the test table indicates the beginning of the week for which the revenue was received.)
1st Feb 2019, 11:50 AM
Виталий Аникин
Виталий Аникин - avatar
0
select trunc(a.d_date, 'MM'), sum(a.d_sum) from (select t.s_date + level - 1 d_date, (t.s_sum / 5) d_sum from testtable t connect by prior t.s_date = t.s_date and prior dbms_random.value is not null and level <= 5) a where trunc(a.d_date, 'MM') = nvl(trunc(to_date(:first_date_of_month, 'dd.mm.yyyy'), 'MM'), trunc(a.d_date, 'MM')) group by trunc(a.d_date, 'MM')
1st Feb 2019, 12:38 PM
Виталий Аникин
Виталий Аникин - avatar
- 1
Чтобы рассчитать сумму за месяц на основе ежедневных данных: (To calculate month amount from daily amount data:) SELECT DATE_FORMAT(date, "%Y") Year, DATE_FORMAT(date, "%M") Month, SUM(amount) 'Monthly Amount' FROM docs GROUP BY MONTH(date), YEAR(date); Tested on http://www.sqlfiddle.com/#!9/c62d5d/6
1st Feb 2019, 9:40 AM
Calviղ
Calviղ - avatar