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

SQL:列の値が前の行から変更された行を選択する

    SELECT a.*
    FROM tableX AS a
    WHERE a.StatusA <>
          ( SELECT b.StatusA
            FROM tableX AS b
            WHERE a.System = b.System
              AND a.Timestamp > b.Timestamp
            ORDER BY b.Timestamp DESC
            LIMIT 1
          ) 
    

    ただし、これも試すことができます((System,Timestamp)のインデックスを使用して :

    SELECT System, Timestamp, StatusA, StatusB
    FROM
      ( SELECT (@statusPre <> statusA AND @systemPre=System) AS statusChanged
             , System, Timestamp, StatusA, StatusB
             , @statusPre := StatusA
             , @systemPre := System
        FROM tableX
           , (SELECT @statusPre:=NULL, @systemPre:=NULL) AS d
        ORDER BY System
               , Timestamp
      ) AS good
    WHERE statusChanged ;
    


    1. オプションで列を検索するストアドプロシージャを作成するにはどうすればよいですか?

    2. Oracleの数値を含む行を返す

    3. SQL ServerでCHECK制約が列レベルかテーブルレベルかを確認します(T-SQLの例)

    4. PostgreSQL:日時との間