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

次および前の行の値を参照する

    一意のID列があり、タイムスタンプ列の増加を追跡しないことを興味深いものにするとします。また、等しいタイムスタンプがないと仮定します。

    select pt.* from
    (Select max(ptime) as prevtime,min(ntime) as nextime from
    ((Select timestamp as ptime) as prev,
    (Select timestamp as ntime) as next
    where prev.ptime < next.ntime and prev.id<>next.id) as s1 group by ptime, ntime) as pn
    inner join 
    t as pt on pn.prevtime=pt.timestamp inner join 
    t as nt on pn.nexttime=nt.timestamp
    where pt.ncol!=nt.ncol;
    

    説明:s1は、互いの前後にある時間のペアを提供します。 pnはそれらをグループ化して、隣接するすべての時間のペアのリストを取得します。 ptはpnで前回の残りの列を提供し、ntは次回の残りの列を提供します。 ncol switchsという名前の列の値が変わると、前の行が結果セットに吐き出されます。 null以外の値が複数あり、nullとnull以外の切り替えを見つけることだけが面白かった場合は、pt.ncol!=nt.ncolをisnull(pt.ncol)!=isnull(nt.ncol)に変更します。




    1. PostgreSQLを使用したCakePHP2.2が新しい行の挿入に失敗しました-データベースエラー:未定義のテーブル:7エラー:リレーションtable_id_seqが存在しません

    2. 結合されたテーブルを使用したHibernateでのページネーション

    3. クエリが終了する前にクエリ結果の表示を開始する

    4. PDOステートメントでの列名のエスケープ