【SQL Server 2019】datetime型をなんとかして月ごとに集計(GROUP BY)する

ネコニウム研究所

PCを利用したモノづくりに関連する情報を掲載するブログ

【SQL Server 2019】datetime型をなんとかして月ごとに集計(GROUP BY)する

2022-7-5 | ,

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を作成する。

前処理済みのテーブルTMPFROMして、列sold_at_monthGROUP BYする感じ。

まとめ(感想文)

前処理のテーブルを作って処理する方法は、自由度が高くいろんなことができて便利ですが、レコード数が多いテーブルの場合、計算の負荷がかなり高くなるので要注意。