특정 날짜부터 판매 날짜를 그룹화해야합니다. 날짜는 판매 데이터를 내보낼 날짜로 결정됩니다. 아래의 예에서 데이터는 2016/11/10에 수출됩니다.SQL : 매월 특정 날짜의 날짜를 그룹화하는 방법
그런 다음 판매 기간을 노란색 기간으로 그룹화하여 각 기간 동안 판매를 계산해야합니다.
나는 dateadd 함수를 시도했지만 매월마다 다른 요일이있을 수 있으므로 작동하지 않습니다.
모든 의견을 크게 기뻐할 것입니다. 감사.
특정 날짜부터 판매 날짜를 그룹화해야합니다. 날짜는 판매 데이터를 내보낼 날짜로 결정됩니다. 아래의 예에서 데이터는 2016/11/10에 수출됩니다.SQL : 매월 특정 날짜의 날짜를 그룹화하는 방법
그런 다음 판매 기간을 노란색 기간으로 그룹화하여 각 기간 동안 판매를 계산해야합니다.
나는 dateadd 함수를 시도했지만 매월마다 다른 요일이있을 수 있으므로 작동하지 않습니다.
모든 의견을 크게 기뻐할 것입니다. 감사.
이 문제의 핵심은 당신이 그룹 할 수있는 무언가를 찾는 것입니다. 이것이 데이터에 존재하지 않으므로 데이터를 작성해야합니다. 내 기본적인 생각은 날짜를 상쇄하는 것입니다. 현재 날짜 이후의 일은 다음 달로 푸시됩니다. 이것은 우리에게 그룹으로 묶을 수있는보고 월을줍니다.
내 쿼리는 다음 샘플 데이터 사용
-- 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
를 그리고 여기있다 :
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
:
-- 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 일에이 작업을 실행하는 경우
솔직하게이 쿼리에 만족스럽지 않습니다. 나는 그것이 향상되고 단순해질 수 있다고 확신한다. 그러나 잘하면, 그것은 당신에게 좋은 출발점을 제공합니다.
, 많은 고마워, 내 문제를 해결. –
데이터는 항상 10 일에 내 보냈습니까? 그렇지 않은 경우, 내 보낸 날짜를 테이블에 기록합니까? –
@ destination-data, 아니 항상 10 일째되는 것은 아닙니다. 나는 한 달에 여러 번 할 수도 있습니다. –
날짜가 어땠는지 어떻게 알 수 있습니까? 테이블에 기록되어 있습니까? 아니면 항상 오늘입니까 (예 : 24 일에 수출하고 24 번째를 사용한다면)? –