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

同じ日付の実行の最後に特定のレコードをスライドさせる

    これは複雑です。まず、連続する日付レコードを見つける必要があるため、

    thedate     theid  thetype
    2014-07-12   5001       59
    2014-07-12   5002      101
    2014-07-12   5003       88
    2014-07-13   5004       10
    2014-07-12   5005       60
    

    2014-07-12は、最初の3つのレコードの1つのオカレンスとして識別し、最後のレコードの別のオカレンスとして識別します。 2番目のレコードは、結果で5位ではなく3位になる必要があります。

    これは、最初のLAGを使用して、連続するレコードにグループキーを与えることで実現します。 前のレコードを調べて、グループ変更時にフラグを作成し、これらのフラグを累積します。

    select thedate, theid, thetype
    from
    (
      select 
        thedate, theid, thetype,
        sum(new_group) over (order by theid) as group_key
      from
      (
        select
          thedate, theid, thetype,
          case when lag(thedate) over (order by theid) = thedate then 0 else 1 as new_group
        from mytable
      ) marked
    ) grouped
    order by 
      group_key,
      case when thetype = 101 then 1 else 0 end,
      theid;
    


    1. MySQLクエリでのUNION操作とLIMIT操作の組み合わせ

    2. MySQLWorkbenchはMACOSX上のローカルMySQLサービスに接続できません

    3. SQL、終わりがありませんが、なぜですか?

    4. 2つの左結合により、MySQLで誤ったデータ(二重データ?)が発生します