sql >> データベース >  >> RDS >> Mysql

SQLは、他の複数の変数を参照するステートメントの場合に基づいて、新しい変数で1,0を返します

    • 主キーが定義されていないため、creation_dateにデータが順番に入力されると想定しています。 およびladder_level覚えておいてください そのデータはMySQLに順序付けられていない方法で保存されます。
    • 最初に、サブ選択クエリを使用して、必要な順序でデータを取得する必要があります(前の手順で強調表示されているように)。 Order Byは注目に値します Selectの後に実行されます 句;したがって、最初にデータを並べ替えてから、結果セットを派生テーブル
    • ここで、ユーザーの助けを借ります-定義された変数 (セッションレベルの永続的でアクセス可能)。別の派生テーブルuser_init_vars 、初期化します。
    • Selectで 句では、現在の行の値を前の行の値と比較します。比較後、変数値を現在の行の値に設定します。これは、PHP、C ++、Javaなどの他のプログラミング言語で使用されているループ手法と考えることができます。
    • Case .. When 式は、比較、およびladder_changeの決定に使用されます 値。

    クエリ#1

    SELECT 
      dt.ID, 
      CASE WHEN DATE(@rd) <> DATE(dt.record_date) AND 
                dt.ladder_level > @ll 
           THEN 1 
           ELSE 0 
      END AS ladder_change, 
      @rd := dt.record_date AS record_date, 
      @ll := dt.ladder_level AS ladder_level 
    FROM (SELECT ID, record_date, ladder_level 
          FROM conv_example 
          ORDER BY ID, record_date, ladder_level) AS dt 
    CROSS JOIN (SELECT @rd := '', 
                       @ll := '') AS user_init_vars;
    
    | ID    | ladder_change | record_date         | ladder_level |
    | ----- | ------------- | ------------------- | ------------ |
    | 324   | 0             | 2016-09-15 00:00:00 | a            |
    | 324   | 0             | 2016-09-15 00:00:00 | b            |
    | 324   | 0             | 2017-04-07 00:00:00 | b            |
    | 324   | 0             | 2017-04-07 00:00:00 | c1           |
    | 324   | 0             | 2018-09-08 00:00:00 | c1           |
    | 324   | 0             | 2018-09-08 00:00:00 | e            |
    | 1234  | 0             | 2013-04-03 00:00:00 |              |
    | 1234  | 0             | 2014-07-03 00:00:00 | a            |
    | 1234  | 1             | 2015-04-01 00:00:00 | b            |
    | 1234  | 1             | 2016-09-15 00:00:00 | d            |
    | 1234  | 0             | 2017-02-04 00:00:00 | b            |
    | 1234  | 0             | 2017-04-03 00:00:00 | b            |
    | 1234  | 1             | 2017-04-07 00:00:00 | c1           |
    | 1234  | 1             | 2018-09-08 00:00:00 | e            |
    | 31431 | 0             | 2013-04-03 00:00:00 |              |
    | 31431 | 0             | 2014-07-03 00:00:00 | a            |
    | 31431 | 1             | 2017-04-07 00:00:00 | c1           |
    | 31431 | 1             | 2018-09-08 00:00:00 | e            |
    

    DBフィドルで表示




    1. エラー:psycopg2.extensionsという名前のモジュールがありません

    2. SELECTで挿入

    3. SQLiteクエリ結果を列ヘッダー付きの列としてフォーマットする

    4. SQLServerでJSONドキュメントから重複キーを返す方法