mysql - 按周和周分组从星期二开始
问题描述
这是我的数据表:
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 汇总总销售额、总销量和总利润(可以计算为总销售额减去齿轮)。
我怎样才能按周从星期二开始这个小组?
解决方案
为了帮助从星期二开始对您的 Week() 进行采样,我在您提供的示例数据末尾添加了大约 11 行,但日期为 2020 年 2 月 1 日至 2020 年 2 月 11 日。
MySQL 似乎将 SUNDAY 作为一周的默认开始。因此,为了有星期二,我将采用任何交易日期并将其向后移动 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
推荐阅读
- ios - iOS:如何以编程方式打开自动亮度?
- sql - 如何使用自定义开始时间 PostrgresQL 按日期对总和结果进行分组
- telethon - 如何使用 Telethon 发送音频文件,以便可以在移动应用内媒体播放器中播放音频?
- python - 无法将 XGBRegressor 与 sklearn RFE 一起使用
- ios - 后alamofire没有开火
- sql - 如何重新排序同一个表中的数据?
- reactjs - 如何让我的 React 代码在 VS Code 中正确格式化?
- c# - c# 8 switch 表达式:没有找到 switch 表达式的最佳类型
- jmeter - 非 HTTP 响应代码:JMeter 中的 java.net.UnknownHostException
- python - 在 Numpy/Pandas 中创建条件循环