按周分组,每周从星期二开始

时间:2020-02-06 03:36:48

标签: mysql sql group-by timestamp-with-timezone

这是我的数据表:

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

请注意,表的组织方式不正确。

我需要通过周数,商店ID来汇总总销售额,已售总数量和总利润(可以计算为总销售额减去嵌齿轮)。

我该如何按周进行分组,而周从星期二开始?

1 个答案:

答案 0 :(得分:1)

I created a sample out on SqlFiddle

为了帮助您从周二开始对Week()进行抽样,我在您提供的示例数据的末尾添加了约11行,但给出了2020年2月1日至2020年2月11日的日期。

MySQL似乎将SUNDAY作为Week的默认开始。因此,要拥有TUESDAY,我将采用任何交易日期,并将其向后移动2天(星期二-1 =星期一-1 =星期日)。因此,现在“ WEEK”功能将返回一年中的星期。您可以从第一个查询中看到结果,该查询将原始日期与WEEK()的日感知区别开来,然后再通过-2转换再次查看,以查看星期基于星期几的变化。

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
相关问题