プログラム 技術

1日ごとのデータから先月分だけを取得する

1日ごとのデータを登録しているものがあり、そこから先月分の1日ごとのものを取得したいとなった際のメモとなります
例えば、2025年4月1日~2025年4月30日の1日ごとのデータを取得しようとした際などです。実装の仕方の1つとしてのものとなるので、
他にも方法があるかもしれません
なので、今回はSQLとC#での実装方法を紹介しますが、他の言語でも同じようにすれば実現できると思います

どのように先月の日付を取得するか

先に実装の仕方を書いておくと以下のようになります。実装方法としてはそんなに難しくありません

  • 開始日・・・実行月の1ヶ月前のN月1日を設定
  • 終了日・・・開始日に+1ヶ月し、そこから-1日した値を設定

C#での実装方法

先ほどの説明をC#で実装すると以下のようになります

// 実行月の1つ前の月の開始日と終了日を計算(年跨ぎを考慮)
var lastMonth = DateTime.Now.AddMonths(-1);
var monthStart = new DateTime(lastMonth.Year, lastMonth.Month, 1);
var monthEnd = monthStart.AddMonths(1).AddDays(-1);

// 実行例:2025年5月のいずれの日に実行した場合
// monthStart は4月1日となり、monthEnd は4月30日となります

SQLでの実装方法

続いてはSQL文での実装方法となります。こちらは先ほどのC#とは少し違い、DATEDIFF関数とEOMONTH関数を用いて開始日と終了日を求めています

--DATE型の変数を定義
DECLARE
	@date DATE,
	@monthStart DATE,
	@monthEnd DATE

--変数へシステムの-1ヶ月前の日付を代入
SET @date     = DATEADD(MONTH, -1, GETDATE())
SET @monthStart = DATEADD(MONTH, DATEDIFF(MONTH, 0, @date), 0)
SET @monthEnd   = EOMONTH(@date)

--Dailyに日付が登録されている想定、BETWEEN関数で月初から月末までのデータを抽出
SELECT *
FROM DailyDate
WHERE Daily BETWEEN @monthStart AND @monthEnd;  

上記の方法を用いれば、1日ごとのデータでも簡単に月のデータとして取得できるようになったかと思います

会社紹介

私が所属しているアドバンスド・ソリューション株式会社(以下、ADS)は一緒に働く仲間を募集しています

会社概要
「技術」×「知恵」=顧客課題の解決・新しい価値の創造

この方程式の実現はADSが大切にしている考えで、技術を磨き続けるgeekさと、顧客を思うloveがあってこそ実現できる世界観だと思っています
この『love & geek』の精神さえあれば、得意不得意はno problem!
技術はピカイチだけど顧客折衝はちょっと苦手。OKです。技術はまだ未熟だけど顧客と知恵を出し合って要件定義するのは大好き。OKです
凸凹な社員の集まり、色んなカラーや柄の個性が集まっているからこそ、常に新しいソリューションが生まれています

ミッション
私たちは、テクノロジーを活用し、業務や事業の生産性向上と企業進化を支援します

ホームページ
アドバンスド・ソリューション株式会社|ADS Co., Ltd.
アドバンスド・ソリューション株式会社|ADS Co., Ltd.

Microsoft 365/SharePoint/Power Platform/Azure による DX コンサル・シス ...

サイトへ移動

PR

-プログラム, 技術
-,