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

SQLOracle-連続する行をフィルターと組み合わせる

    この質問をしてから4年が経ちました。しかし、OracleはMATCH_RECOGNIZE を追加しました。 Oracle 12cの条項であり、これによりソリューションがよりシンプルになりました。

    SELECT
      foo_id, high_speed, speed,
      NVL(DateFromZ, DateFrom) DateFrom,
      NVL(DateToZ, DateTo) DateTo
    FROM test
    MATCH_RECOGNIZE (
      ORDER BY RecordId
      MEASURES
        FIRST(zeros.DateFrom) AS DateFromZ,
        FINAL LAST(zeros.DateTo) AS DateToZ,
        COUNT(*) AS cnt
      ALL ROWS PER MATCH WITH UNMATCHED ROWS
      PATTERN (zeros+)
      DEFINE
        zeros AS zeros.speed = 0
    )
    WHERE speed > 0 OR cnt = 1
    ORDER BY RecordId;
    

    出力:

    +--------+------------+-------+------------+------------+
    | FOO_ID | HIGH_SPEED | SPEED |  DATEFROM  |   DATETO   |
    +--------+------------+-------+------------+------------+
    |     12 |         60 |    10 | 09/11/2011 | 10/11/2011 |
    |     13 |         20 |    20 | 11/11/2011 | 11/11/2011 |
    |     12 |          0 |     0 | 13/11/2011 | 14/11/2011 |
    |     12 |         70 |    50 | 15/11/2011 | 26/11/2011 |
    |     12 |         40 |    40 | 09/11/2011 | 09/11/2011 |
    |     13 |         25 |    20 | 09/11/2011 | 09/11/2011 |
    |     12 |          0 |     0 | 15/11/2011 | 19/11/2011 |
    |     12 |         20 |    10 | 12/11/2011 | 12/11/2011 |
    +--------+------------+-------+------------+------------+
    

    db <>fiddle のデモ 。




    1. 従来のAPIを使用したMySQLクエリが成功したかどうかを確認するにはどうすればよいですか?

    2. ON DUPLICATE KEY UPDATEの複数挿入のために挿入された行数を取得していますか?

    3. SQLエラー:ORA-00907:右括弧がありません

    4. T-SQLのバグ、落とし穴、およびベストプラクティス–ピボットとピボット解除