Группа По неделям и неделям начинается со вторника - PullRequest
0 голосов
/ 06 февраля 2020

Вот моя таблица данных:

invoice_id  invoice_line    store_id    time_stamp  product units   sales   cogs
10000001    31215           3           9/3/17      3000    1       99.99   58.00
10000001    31216           3           9/3/17      3354H   3       32.99   18.00
10000002    91455           1           9/5/17      1234    2       24.99   20.00
10000003    59943           2           9/5/17      3000    1       19.99   14.99
10000004    95027           2           9/5/17      18518   1       9.99    3.00
10000005    73994           2           9/5/17      12HA12  15      3.99    1.99
10000006    98464           1           10/1/17     wh30000 1       199.99  75.00

Пожалуйста, знайте, что таблица не организована должным образом.

Мне нужно суммировать общий объем продаж, общее количество проданных товаров и общую прибыль (которая можно рассчитать как общий объем продаж за вычетом Cogs) по номеру недели, идентификатору магазина.

Как я могу сделать эту группу по неделям, когда неделя начинается во вторник?

1 Ответ

1 голос
/ 06 февраля 2020

Я создал образец на SqlFiddle

Чтобы помочь сэмплировать вашу Week (), начиная со вторника, я добавил около 11 строк в конце предоставленных вами образцов данных, но дал даты 1 февраля 2020 года - 11 февраля 2020 года.

MySQL, по-видимому, имеет воскресенье по умолчанию в качестве начала недели. Итак, чтобы иметь вторник, я беру любую дату транзакции и сдвигаю ее на 2 дня назад (вторник -1 = понедельник - 1 = воскресенье). Так что теперь функция «НЕДЕЛЯ» будет возвращать неделю года. Вы можете увидеть результаты этого из первого запроса, который различает исходную дату и ее восприятие дня для WEEK (), а затем снова ПОСЛЕ того, что со сдвигом -2, чтобы увидеть изменения недели, основанные на TUESDAY недели.

select
        week( SI.Time_Stamp ) DefWeek,
        dayName( SI.Time_Stamp ) DefWeekName,
        week( date_add( SI.Time_Stamp, interval -2 day )) TuesWeek,
        dayName( date_add( SI.Time_Stamp, interval -2 day )) TuesWeekName,
        SI.*
    from
        StackInvoice SI
    order by
        SI.Time_Stamp;

Теперь, когда вы видите, как применяется этот сдвиг, теперь это простая агрегация.

select
        week( date_add( SI.Time_Stamp, interval -2 day )) TuesWeek,
        SI.Store_ID,
        sum( SI.Sales ) TotalSales,
        sum( SI.Units ) TotalUnits,
        sum( SI.Sales - SI.Cogs ) TotalProfit
    from
        StackInvoice SI
    group by
        week( date_add( SI.Time_Stamp, interval -2 day )),
        SI.Store_ID
    order by
        week( date_add( SI.Time_Stamp, interval -2 day )),
        SI.Store_ID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...