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

グループ化列の値を順番に変更してデータをグループ化する

    この種の問題を解決するための(多かれ少なかれ)既知の手法があり、2つの ROW_NUMBER() このような呼び出し:

    WITH marked AS (
      SELECT
        *,
        grp = ROW_NUMBER() OVER (PARTITION BY product        ORDER BY date)
            - ROW_NUMBER() OVER (PARTITION BY product, price ORDER BY date)
      FROM #ph
    )
    SELECT
      product,
      date_from = MIN(date),
      date_to   = MAX(date),
      price
    FROM marked
    GROUP BY
      product,
      price,
      grp
    ORDER BY
      product,
      MIN(date)
    

    出力:

    product  date_from   date_to        price 
    -------  ----------  -------------  ----- 
    1        2012-01-01  2012-01-04     1     
    1        2012-01-05  2012-01-08     2     
    1        2012-01-09  2012-01-12     1     
    


    1. 挿入から1日後の行の自動削除(MySQL)

    2. mysqlデータベースにはいくつのテーブルを作成できますか?

    3. データベースを動的に選択する

    4. 1つのステートメントでJavaで実行される複数のクエリ