我需要将销售日期从特定日期开始分组。日期由销售数据的日期确定。在下面的示例中,数据将在2016/11/10导出。
然后应将销售日期分组到黄色列中,以计算每个期间的销售额。
我尝试了dateadd功能,但由于每个月可能有不同的日期,所以它不起作用。
任何建议都将不胜感激。感谢。
答案 0 :(得分:1)
这一挑战的关键是找到可以分组的东西。由于数据中不存在,您需要创建它。我的基本想法是抵消日期。当前日期之后的天数将推迟到下个月。这给了我们一个报告月,我们可以将其分组。
我的查询使用以下示例数据:
-- Generates a sample table.
-- Contains one record per day, between Dec 1st 2015 and Feb 29th 2016.
DECLARE @BaseDate DATE = '2015-12-01';
DECLARE @Sample TABLE
(
DateKey DATE
)
;
WHILE @BaseDate < '2016-02-29'
BEGIN
INSERT INTO @Sample
(
DateKey
)
VALUES
(@BaseDate)
;
SET @BaseDate = DATEADD(DAY, 1, @BaseDate);
END
这就是:
-- Offsets the date into reporting month groups.
SELECT
DateKey,
CASE
WHEN DAY(DateKey) > DAY(GETDATE())THEN
CASE MONTH(DateKey) WHEN 12 THEN DATEFROMPARTS(YEAR(DateKey) + 1, 1, 1)
ELSE DATEFROMPARTS(YEAR(DateKey), MONTH(DateKey) + 1, 1)
END
ELSE DATEFROMPARTS(YEAR(DateKey), MONTH(DateKey), 1)
END AS ReportingMonth
FROM
@Sample
WHERE
DateKey BETWEEN '2015-12-01' AND '2016-04-30'
ORDER BY
DateKey DESC
;
如果您在一个月的24日运行此结果,结果如下:
DateKey ReportingMonth
2016-02-28 2016-03-01
2016-02-28 2016-03-01
2016-02-27 2016-03-01
2016-02-26 2016-03-01
2016-02-25 2016-03-01
2016-02-24 2016-02-01 -- Reporting period changes here.
2016-02-23 2016-02-01
2016-02-22 2016-02-01
...
2015-12-03 2015-12-01
2015-12-02 2015-12-01
2015-12-01 2015-12-01
说实话,我对这个查询不满意。我相信它可以改进和简化。但希望它能为您提供一个良好的起点。