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

IDおよび最小/最大日付によるバイナリ変数のグループ化

    Oracle 12以降、これはMATCH_RECOGNIZEが発生するタイプの問題です。 解決することを目的としています:

    SELECT *
    FROM   table_name
    MATCH_RECOGNIZE (
      PARTITION BY Emp_ID
      ORDER     BY dt
      MEASURES
        FIRST(dt) AS min_date,
        LAST(dt)  AS max_date,
        MATCH_NUMBER() AS group_number
      PATTERN (one+)
      DEFINE
        one AS dummy = 1
    )
    

    サンプルデータの場合:

    CREATE TABLE table_name ( dt, Emp_ID, Dummy ) AS
    SELECT DATE '2021-01-01', 5, 1 FROM DUAL UNION ALL
    SELECT DATE '2021-01-02', 5, 1 FROM DUAL UNION ALL
    SELECT DATE '2021-01-03', 5, 1 FROM DUAL UNION ALL
    SELECT DATE '2021-01-04', 5, 1 FROM DUAL UNION ALL
    SELECT DATE '2021-01-05', 5, 0 FROM DUAL UNION ALL
    SELECT DATE '2021-01-06', 5, 1 FROM DUAL UNION ALL
    SELECT DATE '2021-01-07', 5, 1 FROM DUAL UNION ALL
    SELECT DATE '2021-01-01', 8, 1 FROM DUAL UNION ALL
    SELECT DATE '2021-01-02', 8, 1 FROM DUAL UNION ALL
    SELECT DATE '2021-01-03', 8, 1 FROM DUAL UNION ALL
    SELECT DATE '2021-01-04', 8, 0 FROM DUAL UNION ALL
    SELECT DATE '2021-01-05', 8, 0 FROM DUAL UNION ALL
    SELECT DATE '2021-01-06', 8, 0 FROM DUAL UNION ALL
    SELECT DATE '2021-01-07', 8, 1 FROM DUAL;
    

    出力:

    db <> fiddle こちら




    1. SQL国民文字(NCHAR)データ型は本当に何のためにありますか?

    2. mysqlで月と年ごとに日付を比較する

    3. 「Windows10S」について知っておくべき5つのこと

    4. InnoDBとMyISAMの違いは?