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

すべてのレコードが前のレコードと結合されるようにテーブルを自己結合する方法は?

    1 つのオプションは、再帰的な cte を使用することです (要件を正しく理解している場合):

    WITH RNCTE AS (
      SELECT *, ROW_NUMBER() OVER (PARTITION BY symbol ORDER BY date) rn
            FROM quotes
      ),
    CTE AS (
      SELECT symbol, date, rn, cast(0 as decimal(10,2)) perc, closed
      FROM RNCTE
      WHERE rn = 1
      UNION ALL
      SELECT r.symbol, r.date, r.rn, cast(c.closed/r.closed as decimal(10,2)) perc, r.closed
      FROM CTE c 
        JOIN RNCTE r on c.symbol = r.symbol AND c.rn+1 = r.rn
      )
    SELECT * FROM CTE
    ORDER BY symbol, date
      

    SQL Fiddle デモ

    パーセンテージの変化として使用する各シンボルの現在の合計が必要な場合は、その金額の追加の列を追加するのは簡単です-あなたの意図が完全にはわからなかったので、上記は現在のクローズ金額を以前の成約金額。



    1. SQLServerカーソルを使用したSalesforceデータの更新

    2. 5mレコードテーブルのクエリにソートされたインデックスのみを使用するpostgres

    3. 間隔の最大解像度を決定する方法は?

    4. マップされたステートメントコレクションにmybatisマッパーの値が含まれていません