【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する感じ。

まとめ(感想文)

月計(月集計)するのに便利かもね!

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