[英]Get each date of month in sql and from group by take cost and distribute
[英]SQL:How to group the dates from a certain date of each month
挑战的关键是找到可以分组的东西。 由于在数据中不存在,因此需要创建它。 我的基本想法是抵消日期。 当前月份之后的日期将推入下个月。 这给了我们一个报告月份,我们可以对其进行分组。
我的查询使用以下示例数据:
-- 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
老实说,我对此查询不满意。 我相信可以改进和简化它。 但希望它为您提供了一个良好的起点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.