この記事では、例を使用して、MySQL スライディング順序問題の原理と解決方法を説明します。ご参考までに、詳細は以下の通りです。 まず、MonthlyOrdersテーブルを作成し、次のコードに従ってデータをインポートします。 テーブル MonthlyOrders を作成します( 注文月 DATE、 順序番号 INT UNSIGNED, 主キー (ordermonth) ); MonthlyOrders に INSERT INTO SELECT '2010-02-01',23; を挿入します。 MonthlyOrders に INSERT INTO SELECT '2010-03-01',26; を挿入します。 MonthlyOrders に INSERT INTO SELECT '2010-04-01',24; を挿入します。 MonthlyOrders に INSERT INTO SELECT '2010-05-01',27; を挿入します。 MonthlyOrders に INSERT INTO SELECT '2010-06-01',26; を挿入します。 MonthlyOrders に INSERT INTO SELECT '2010-07-01',32; を挿入します。 MonthlyOrders に INSERT INTO SELECT '2010-08-01',34; を挿入します。 MonthlyOrders に INSERT INTO SELECT '2010-09-01',30; を挿入します。 MonthlyOrders に INSERT INTO SELECT '2010-10-01',31; を追加します。 MonthlyOrders に INSERT INTO SELECT '2010-11-01',32; を挿入します。 MonthlyOrders に INSERT INTO SELECT '2010-12-01',33; を挿入します。 MonthlyOrders に INSERT INTO SELECT '2011-01-01',31; を挿入します。 MonthlyOrders に INSERT INTO SELECT '2011-02-01',34; を挿入します。 MonthlyOrders に INSERT INTO SELECT '2011-03-01',34; を挿入します。 MonthlyOrders に INSERT INTO SELECT '2011-04-01',38; を挿入します。 MonthlyOrders に INSERT INTO SELECT '2011-05-01',39; を挿入します。 MonthlyOrders に INSERT INTO SELECT '2011-06-01',35; を挿入します。 MonthlyOrders に INSERT INTO SELECT '2011-07-01',49; を挿入します。 MonthlyOrders に INSERT INTO SELECT '2011-08-01',56; を挿入します。 MonthlyOrders に INSERT INTO SELECT '2011-09-01',55; を挿入します。 MonthlyOrders に INSERT INTO SELECT '2011-10-01',74; を挿入します。 MonthlyOrders に INSERT INTO SELECT '2011-11-01',75; を挿入します。 MonthlyOrders に INSERT INTO SELECT '2011-12-01',14; を挿入します。 スライディングオーダー問題とは、前年度(四半期または月)の各月のスライディングオーダー数を返すこと、つまり、各 N 月について、N-11 から N 月までのオーダーの合計数を返すことを指します。ここでは、月の順序にギャップがないものと想定します。 次のSQLクエリを実行して、前年の各月のスライディングオーダーの合計数を返します。 選択 DATE_FORMAT(a.ordermonth, '%Y%m') AS frommonth, DATE_FORMAT(b.ordermonth, '%Y%m') AS tomonth, SUM(c.ordernum) AS 注文 毎月の注文から INNER JOIN 毎月の注文 b ON DATE_ADD(a.ordermonth, INTERVAL 11 MONTH) = b.ordermonth INNER JOIN 毎月の注文 c c.ordermonth で、a.ordermonth と b.ordermonth の間 GROUP BY a.ordermonth、b.ordermonth; 実行結果は次のとおりです クエリは最初に MonthlyOrders テーブルで自己結合を実行します。表 a は下限 (frommonth) として使用され、表 b は上限 (tomonth) として使用されます。接続の条件は次のとおりです。 DATE_ADD(a.ordermonth, INTERVAL 11 MONTH) = b.ordermonth たとえば、表 a の 2010 年 2 月は 2011 年 1 月と一致します。 自己接続が完了したら、注文をカウントする必要があります。この時点で、範囲内の各月の注文数を取得するには、別の自己結合を実行する必要があります。接続の条件は c.ordermonth は a.ordermonth と b.ordermonth の間です 上記の方法に基づいて、四半期ごとの受注状況を集計し、前年比の成長と比較するための基準として使用することもできます。 選択 DATE_FORMAT(a.ordermonth, '%Y%m') AS frommonth, DATE_FORMAT(b.ordermonth, '%Y%m') AS tomonth, SUM(c.ordernum) AS 注文 毎月の注文から INNER JOIN 毎月の注文 b ON DATE_ADD(a.ordermonth, INTERVAL 2 MONTH) = b.ordermonth AND MONTH(a.ordermonth) % 3 = 1 INNER JOIN 毎月の注文 c c.ordermonth で、a.ordermonth と b.ordermonth の間 GROUP BY a.ordermonth、b.ordermonth; 実行結果は次のとおりです MySQL 関連のコンテンツに興味のある読者は、このサイトの次のトピックをチェックしてください: 「MySQL クエリ スキル」、「MySQL 共通関数の概要」、「MySQL ログ操作スキル」、「MySQL トランザクション操作スキルの概要」、「MySQL ストアド プロシージャ スキル」、および「MySQL データベース ロック関連スキルの概要」 この記事が皆様のMySQLデータベース設計に役立つことを願っています。 以下もご興味があるかもしれません:
|
<<: CentOS8 - bash: 文字化けとその解決方法
>>: jQueryはHTML要素の非表示と表示を実装します
<br />内容はインターネットから転載したものです。どこから見つけたのか忘れてしまいま...
JavaScriptで格納可能なセカンダリメニューを実装するための具体的なコードは参考までに。具体...
この記事の本文を始める前に、まず ffmpeg プログラムをインストールする必要があります (Lin...
/************************ * Linux メモリ管理 *********...
a : ハイパーリンクの開始位置または宛先位置を示します。頭字語: 単語の最初の文字からなる略語を示...
序文コンピュータの数値は浮動小数点であるため、計算プロセス中に取得されるデータは通常正確ではなく、そ...
この記事では、スキン変更効果を実現するためのJavaScriptの具体的なコードを参考までに紹介しま...
目次マハ1. MAHアーキテクチャの概要2. 適用可能なシナリオ3. MHAの動作原理4. MHAの...
1. 公式ウェブサイトから 64 ビットの zip ファイルをダウンロードします。 2. インスト...
Linuxにunzipコマンドがない問題の解決策unzipコマンドを使用して.zipファイルを解凍す...
序文MySQL 8.0.13 では、インデックス スキップ スキャン (インデックス ジャンプ スキ...
目次折りたたむ(減らす) for...of の使用whileループの使用折り畳み実装に近い展開する配...
まず、CSS3 の相対的な長さの単位を見てみましょう (詳細なチュートリアルを参照してください)。相...
HTTP ステータス コードステータス コードは 3 桁の数字と理由フレーズ (最も一般的なもの: ...
MySql データベースのサブクエリ:サブクエリ: 選択クエリ ステートメント内に別の選択ステートメ...