sql >> Database >  >> RDS >> Sqlserver

Hoe kan ik zelf een tabel samenvoegen op een manier dat elk record wordt samengevoegd met het vorige record?

Een optie is om een ​​recursieve cte te gebruiken (als ik uw vereisten goed begrijp):

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

Als u een lopend totaal nodig heeft voor elk symbool om te gebruiken als de procentuele verandering, dan is het eenvoudig genoeg om een ​​extra kolom voor dat bedrag toe te voegen -- ik wist niet helemaal zeker wat uw bedoelingen waren, dus het bovenstaande deelt het huidige gesloten bedrag gewoon door de vorig gesloten bedrag.



  1. php-code om dynamische rijen te maken en in de database in te voegen

  2. Hoe MySQL-verbindingen te beëindigen

  3. heb volgorde van meerdere items

  4. Hoe de serverstatus in MySQL Workbench te controleren met behulp van de GUI