ホームページ >データベース >mysql チュートリアル >一時テーブルや変数を使用せずに日付シリーズを生成するにはどうすればよいですか?

一時テーブルや変数を使用せずに日付シリーズを生成するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-06 12:22:12767ブラウズ

How to Generate a Date Series Without Temporary Tables or Variables?

一時テーブルまたは変数を使用しない一連の日付の生成

事前定義された日付範囲を持つテーブルが利用できるにもかかわらず、このアプローチは最適とは言えません。一時テーブルや変数操作に頼らずに、指定した間隔内で一連の日付を生成するにはどうすればよいですか?

次のシナリオを考えてみましょう。アプリケーションでは、利用可能なデータに関係なく、日付ごとに行を返すレポートが必要です。これを実現するには、単純なクエリを作成できます。

select dates.date, sum(sales.amount)
from <series of dates between X and Y> dates
left join sales on date(sales.created) = dates.date
group by 1

多数の日付を含むテーブルの作成を避けるために、別のソリューションをお勧めします。

select * from 
(select adddate('1970-01-01',t4*10000 + t3*1000 + t2*100 + t1*10 + t0) gen_date from
 (select 0 t0 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t0,
 (select 0 t1 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t1,
 (select 0 t2 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t2,
 (select 0 t3 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t3,
 (select 0 t4 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t4) v
where gen_date between '2017-01-01' and '2017-12-31'

このクエリは効率的に系列を生成します。別のテーブルを作成したり変数を設定したりせずに、指定された範囲内の日付を取得します。

以上が一時テーブルや変数を使用せずに日付シリーズを生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。