这是我的数据表:
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来汇总总销售额,已售总数量和总利润(可以计算为总销售额减去嵌齿轮)。
我该如何按周进行分组,而周从星期二开始?
答案 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