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

Find den forrige værdi, der ikke er nul, fra en datoordnet liste

Her er dit eksempelbord

SELECT * INTO #TEMP
FROM
(
SELECT 'Item1' [Item Name],      '01/01/2013' [Date], 10.00 [Price]
UNION ALL
SELECT 'Item1',      '02/01/2013', 9.50
UNION ALL
SELECT 'Item1',      '03/01/2013', 0
UNION ALL
SELECT 'Item1',      '04/01/2013', 7.50
UNION ALL
SELECT 'Item1',     '05/01/2013', 0.00
UNION ALL
SELECT 'Item1',     '06/01/2013', 0.00
UNION ALL
SELECT 'Item1',     '07/01/2013', 11.00
UNION ALL
SELECT 'Item2',      '01/01/2013', 0.00
UNION ALL
SELECT 'Item2',     '02/01/2013', 12.00
UNION ALL
SELECT 'Item2',      '03/01/2013', 0.00
UNION ALL
SELECT 'Item2',      '04/01/2013', 0.00
UNION ALL
SELECT 'Item2',     '05/01/2013', 13.00
)TAB
 

Og resultatforespørgslen

SELECT [Item Name],[Date], CASE WHEN [Price]=0 THEN ISNULL((SELECT TOP 1 [Price] FROM #TEMP T2 WHERE CAST(T2.[Date] AS DATE)<T1.[Date] AND T1.[Item Name]=T2.[Item Name] AND T2.[Price]>0 ORDER BY CAST(T2.[Date] AS DATE) DESC),0) ELSE [Price] END [Price] FROM #TEMP T1

Dit resultat er her

Her er den fungerende Fiddle http://sqlfiddle.com/#!3/afabd/1 (Hvis den viser en fejl ved indlæsning af siden, tryk på RUNSQL, det vil virke)




  1. brug kolonneværdi som kolonnenavn mysql

  2. Skriv en insert-sætning med select-sætning, der returnerer id i oracle

  3. MySQL XDevAPI Sådan returneres en vellykket status

  4. Postgres array json seneste dato