Please start any new threads on our new
site at https://forums.sqlteam.com. We've got lots of great SQL Server
experts to answer whatever question you can come up with.
Author |
Topic |
arkiboys
Master Smack Fu Yak Hacker
1433 Posts |
Posted - 2012-10-15 : 04:40:08
|
tblMain has two fields, Date and Value:select Date, Value from tblMainDate value31 aug 2010 1.0 07 sep 2010 1.514 sep 2010 7.221 sep 2010 6.328 sep 2010 6.830 sep 2010 6.812Without using a cursor, how is it possible to do the following from the above data in a select query.Notice that you are going through the dates one by one and:next date/previousdate...This is what I want to get please:final value = ((((1.5/1.0)/1.0) * 100)/100+1) * ((((7.2/1.5)/1.5) * 100)/100+1) * ((((6.3/7.2)/7.2) * 100)/100+1) * ((((6.8/6.3)/6.3) * 100)/100+1) * ((((6.812/6.8)/6.8) * 100)/100+1) |
|
sql-programmers
Posting Yak Master
190 Posts |
Posted - 2012-10-15 : 05:37:03
|
HiDECLARE @tblMain AS TABLE (dateC DATETIME, valC FLOAT)DECLARE @tblMain2 AS TABLE (ID INT IDENTITY, dateC DATETIME, valC FLOAT)INSERT INTO @tblMain ( dateC, valC ) VALUES ( '31 aug 2010', 1.0)INSERT INTO @tblMain ( dateC, valC ) VALUES ( '07 sep 2010', 1.5)INSERT INTO @tblMain ( dateC, valC ) VALUES ( '14 sep 2010', 7.2)INSERT INTO @tblMain ( dateC, valC ) VALUES ( '21 sep 2010', 6.3)INSERT INTO @tblMain ( dateC, valC ) VALUES ( '28 sep 2010', 6.8)INSERT INTO @tblMain ( dateC, valC ) VALUES ( '30 sep 2010', 6.812)INSERT INTO @tblMain2( dateC, valC )select DateC, ValC from @tblMain ORDER BY dateCselect DateC, ValC from @tblMain2 DECLARE @i AS INT DECLARE @cnt AS INT DECLARE @finalValue AS FLOATSET @i = 1SET @cnt = 0SELECT @cnt = COUNT(ID) FROM @tblMain2 DECLARE @valC1 FLOATDECLARE @valC2 FLOATSET @finalValue = 1.0WHILE (@i < @cnt)BEGIN--final value = ((((1.5/1.0)/1.0) * 100)/100+1) * ((((7.2/1.5)/1.5) * 100)/100+1) * ((((6.3/7.2)/7.2) * 100)/100+1) * ((((6.8/6.3)/6.3) * 100)/100+1) * ((((6.812/6.8)/6.8) * 100)/100+1) SELECT @valC1 = valC FROM @tblMain2 WHERE id = @i SELECT @valC2 = valC FROM @tblMain2 WHERE id = (@i + 1) SET @finalValue = @finalValue * ((((@valC2/@valC1)/ @valC1) * 100)/ 100 + 1) SET @i = @i + 1 ENDSELECT ((((1.5/1.0)/1.0) * 100)/100+1) * ((((7.2/1.5)/1.5) * 100)/100+1) * ((((6.3/7.2)/7.2) * 100)/100+1) * ((((6.8/6.3)/6.3) * 100)/100+1) * ((((6.812/6.8)/6.8) * 100)/100+1) SELECT @finalValueSQL Server Programmers and Consultantshttp://www.sql-programmers.com/ |
|
|
malpashaa
Constraint Violating Yak Guru
264 Posts |
Posted - 2012-10-15 : 06:12:05
|
Or something like this:DECLARE @final_value DECIMAL(18, 3) = 1;WITH CTE AS( SELECT T.date, T.value, ROW_NUMBER() OVER(ORDER BY T.date) AS row_num FROM tblMain AS T)SELECT @final_value = @final_value * ((((N.value / P.value) / P.value) * 100) / 100 + 1) FROM CTE AS N INNER JOIN CTE AS P ON P.row_num = N.row_num - 1; For us, there is only the trying. The rest is not our business. ~T.S. EliotMuhammad Al Pasha |
|
|
arkiboys
Master Smack Fu Yak Hacker
1433 Posts |
Posted - 2012-10-15 : 10:32:54
|
Thanks |
|
|
|
|
|
|
|