sql >> Database teknologi >  >> RDS >> Sqlserver

Hvordan tilslutter man sig selv til en tabel på en måde, så hver post er forbundet med den forrige post?

En mulighed er at bruge en rekursiv cte (hvis jeg forstår dine krav korrekt):

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 Demo

Hvis du har brug for en løbende total for hvert symbol, der skal bruges som den procentvise ændring, så er det nemt nok at tilføje en ekstra kolonne for det beløb -- var ikke helt sikker på, hvad dine hensigter var, så ovenstående dividerer bare det nuværende lukkede beløb med tidligere lukket beløb.



  1. lav tekstkolonne som unik nøgle

  2. 6 måder at kontrollere størrelsen af ​​en database i SQL Server ved hjælp af T-SQL

  3. dbms_scheduler Opret job Kører ikke job

  4. venstre join med betingelse for højre tabel i mysql