【SQL Server 2019】datetime型をなんとかして月ごとに集計(GROUP BY)する
2022-7-5 | SQL, SQL Server 2019
SQL Server 2019でdatetime
型をなんとかして月ごとに集計(GROUP BY
)したい!
概要
この記事では、datetime
型をなんとかして月ごとに集計(GROUP BY
)する手順を掲載する。
仕様書
環境
- SQL Server 2019(15.0.2000)
手順書
下表のような売上を記録してるテーブルSALE
を例にする。
列名 | データ型 | 備考 |
---|---|---|
SoldAt | datetime | 売上が発生した日時 |
Sales | int | 売上額 |
登録してるデータは下記のとおり。
SoldAt | Sales |
---|---|
2022/04/11 11:00 | 10000 |
2022/04/16 9:00 | 15000 |
2022/05/07 15:00 | 3000 |
2022/05/09 21:00 | 80000 |
2022/05/25 10:00 | 20000 |
2022/06/06 13:00 | 60000 |
今回はSoldAt
列をなんとかして月ごとにGROUP BY
してみる。
WITH
tmp AS
(
SELECT
FORMAT(SoldAt, 'yyyy-MM-01') AS sold_at_month,
Sales
FROM SELE
)
SELECT
sold_at_month,
SUM(Sales) as sales_total
FROM tmp
GROUP BY sold_at_month
クエリを実行すると下記のように重複内でデータの数が出力される。
sold_at_month | sales_total |
---|---|
2022-04-01 | 25,000 |
2022-05-01 | 103,000 |
2022-06-01 | 60,000 |
解説
FORMAT(SoldAt, 'yyyy-MM-01') AS sold_at_month
の部分、FORMAT
関数で日付の日を強制的に1
に変換して、月ごとにGROUP BY
できるように前処理をしたテーブルTMP
を作成する。
前処理済みのテーブルTMP
をFROM
して、列sold_at_month
でGROUP BY
する感じ。
まとめ(感想文)
月計(月集計)するのに便利かもね!
前処理のテーブルを作って処理する方法は、自由度が高くいろんなことができて便利ですが、レコード数が多いテーブルの場合、計算の負荷がかなり高くなるので要注意。