特定の日付から販売日をグループ化する必要があります。日付は、販売データがエクスポートされた日付によって決まります。以下の例では、データは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日ではありません。私は1ヶ月に数回それをするかもしれない。 –
日付はどのように分かりますか?それはテーブルに記録されていますか?または、それは常に現在の日ですか(つまり、24日に輸出してから24日を使用する場合)?カレンダーテーブルを作成する場合は、ピリオドが定義されていれば –