sql - 按星期的开始和结束日期分组
问题描述
我有以下促销日期:
Group: Ambient
Start Date: 03/11/2020 End Date: 09/11/2020
Start Date: 10/11/2020 End Date: 16/11/2020
Group: Chilled
Start Date: 04/11/2020 End Date: 10/11/2020
Start Date: 11/11/2020 End Date: 17/11/2020
etc
我的数据由以下列组成:日期(每日)、组(环境/冷藏)、净销售额、销量
我想将数据分组如下:
Weekly Date, Group, Net Sales, Volume Sold
每周日期 我希望一周从周二开始,并根据组的类型在周一结束。如果产品冷藏,我希望一周从周三开始,到周二结束。我想这样做并包含一个历史视图以将前几周与促销周进行比较示例
Week Date Group Net Sales Volume
Row 1 - 27/10/2020 Ambient £900 30
Row 2 - 03/11/2020 Ambient £1000 50
Row 3 - 04/11/2020 Chilled £2000 40
Row 4 - 11/11/2020 Chilled £1000 30
更改星期日期的 SQL 查询是什么?
解决方案
可能有其他方法可以做到这一点,但我会首先创建一些函数返回我想要的 DOW(星期几)(周二 0,... 周一 6),然后创建另一个函数 FDOW(第一天周)使用 DOW。IE:
-- Tuesday = 0...Monday = 6
CREATE FUNCTION [dbo].[DOW]
(
@date DATETIME
)
RETURNS INT
AS
BEGIN
-- Add the T-SQL statements to compute the return value here
RETURN (@@DATEFIRST + DATEPART(dw, @date) - 1 - 2) % 7;
END;
CREATE FUNCTION [dbo].[FDOW]
(
@date DATETIME
)
RETURNS DATETIME
AS
BEGIN
RETURN DATEADD(d, -dbo.DOW(@date), CAST(@date AS DATE));
END;
拥有这样的功能很容易在“WeekStart”上进行分组,这是我们的 FDOW 功能:
Select dbo.FDOW(Dates) as WeekOf, [Group],
sum([Net Sales]) [Net Sales],
sum([Volume Sold]) [Volume]
from myTable
group by dbo.FDOW(Dates) as WeekOf, [Group];
推荐阅读
- javascript - 如何将项目从用户的 JSON 文件导入 HTML 并将每个值设置为变量
- jpql - 带有日期文字的 jpql 查询导致 IllegalArgumentException
- numpy - 如何在减法中去除 NaN?
- python - 在 Python Selenium 的新选项卡中打开元素(url)
- javascript - 如何防止用户登录多个设备php
- javascript - setInterval 在 return 语句后继续运行
- javascript - 为什么我的 js 代码在循环时会跳过数组的第一行?
- pytorch - ONNX 模型推理对相同的输入产生不同的结果
- react-quill - ReactQuill 默认字体(无衬线、衬线和等宽)不起作用
- python - 可能有一个带有数据描述符的受密码保护/弱加密的 ZIP 文件吗?