【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する感じ。
まとめ(感想文)
月計(月集計)するのに便利かもね!
前処理のテーブルを作って処理する方法は、自由度が高くいろんなことができて便利ですが、レコード数が多いテーブルの場合、計算の負荷がかなり高くなるので要注意。
