2 つの日付間の日付のリストを生成します
2 つの日付間の日付のリストを取得することは、さまざまなデータ処理シナリオで一般的なニーズです。標準の MySQL 関数では、この機能のオプションが限られています。
日付のリストを生成する効率的な方法は、ストアド プロシージャを利用して一時テーブルにデータを取り込むことです。利用可能な詳細なプロセスは次のとおりです:
<code class="language-sql">CREATE PROCEDURE make_intervals(startdate timestamp, enddate timestamp, intval integer, unitval varchar(10)) BEGIN DECLARE thisDate timestamp; DECLARE nextDate timestamp; SET thisDate = startdate; DROP TEMPORARY TABLE IF EXISTS time_intervals; CREATE TEMPORARY TABLE IF NOT EXISTS time_intervals ( interval_start timestamp, interval_end timestamp ); REPEAT CASE unitval WHEN 'MICROSECOND' THEN SET nextDate = TIMESTAMPADD(MICROSECOND, intval, thisDate) WHEN 'SECOND' THEN SET nextDate = TIMESTAMPADD(SECOND, intval, thisDate) WHEN 'MINUTE' THEN SET nextDate = TIMESTAMPADD(MINUTE, intval, thisDate) WHEN 'HOUR' THEN SET nextDate = TIMESTAMPADD(HOUR, intval, thisDate) WHEN 'DAY' THEN SET nextDate = TIMESTAMPADD(DAY, intval, thisDate) WHEN 'WEEK' THEN SET nextDate = TIMESTAMPADD(WEEK, intval, thisDate) WHEN 'MONTH' THEN SET nextDate = TIMESTAMPADD(MONTH, intval, thisDate) WHEN 'QUARTER' THEN SET nextDate = TIMESTAMPADD(QUARTER, intval, thisDate) WHEN 'YEAR' THEN SET nextDate = TIMESTAMPADD(YEAR, intval, thisDate) END; INSERT INTO time_intervals SELECT thisDate, TIMESTAMPADD(MICROSECOND, -1, nextDate); SET thisDate = nextDate; UNTIL thisDate >= enddate END REPEAT; END;</code>
使用法:
make_intervals
ストアド プロシージャを呼び出します。たとえば、「2009-01-01 00:00:00」と「2009-01-10 00:00:00」の間の毎日の間隔を生成するには、次のように呼び出します: <code class="language-sql">CALL make_intervals('2009-01-01 00:00:00', '2009-01-10 00:00:00', 1, 'DAY');</code>
time_intervals
テーブルと結合して、日付間隔に基づいてデータを集計します。例: <code class="language-sql">SELECT aggregate_function(your_data_table.column_name) AS aggregated_value, time_intervals.interval_start AS date FROM your_data_table LEFT JOIN time_intervals ON (your_data_table.date_column BETWEEN time_intervals.interval_start AND time_intervals.interval_end) GROUP BY time_intervals.interval_start;</code>
出力例:
<code>+----------------------------+----------+ | aggregated_value | date | +----------------------------+----------+ | 值1 | 2009-01-01 | | 值2 | 2009-01-02 | | 值3 | 2009-01-03 | | 值4 | 2009-01-04 | | 值5 | 2009-01-05 | | 值6 | 2009-01-06 | | 值7 | 2009-01-07 | | 值8 | 2009-01-08 | | 值9 | 2009-01-09 | +----------------------------+----------+</code>
このメソッドは、指定された 2 つの日付の間の日付のリストを生成する柔軟な方法を提供し、日付間隔に基づいた便利で効率的なデータ集計を可能にします。
以上がMySQL でストアド プロシージャを使用して 2 つの日付の間の日付のリストを生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。