ID money startDate endDate proid rate updateDate
80 1000000.00 2015-05-02 00:00:00.000 2016-02-06 00:00:00.000 4 0.13 2015-02-06 00:00:00.000
80 1000000.00 2015-05-02 00:00:00.000 2016-02-06 00:00:00.000 4 0.12 2015-03-06 00:00:00.000
80 1000000.00 2015-05-02 00:00:00.000 2016-02-06 00:00:00.000 4 0.13 2015-08-06 00:00:00.000
在存储过程当中如何取到下一个updateDate的值,比如当前循环数据是第一行数据,当前updateDate是2015-02-06,在当前行的情况下怎么取到下一行updateDate也就是2015-03-06这个值呢?
------解决思路----------------------
按UpdateDate,排下序,然后按序取值
------解决思路----------------------
感觉你需要用游标啊,直接FETCH NEXT就是下一行数据了,不过除非绝对的必要,不应该使用游标
替代的,你可以对表的列updateDate 进行ROW_NUMBER()一下,之后根据行号就可以取到下一行了
------解决思路----------------------
;WITH CTE AS(根据你的描述,我想这个应该是你想要的,不过不知道你明白不?
SELECT *,ROW_NUMBER()OVER(ORDER BY updateDate)RN FROM 源表
)
,CTE2 AS(
SELECT * FROM CTE WHERE 条件
)
SELECT * FROM CTE2
UNION ALL
SELECT T2.* FROM CTE2 T1
LEFT JOIN CTE T2 ON T1.RN+1=T2.RN
------解决思路----------------------
;WITH CTE AS(我小调整了一下,你存储过程代入的条件,放到上面语句中条件的地方
SELECT *,ROW_NUMBER()OVER(ORDER BY updateDate)RN FROM 源表
)
,CTE2 AS(
SELECT * FROM CTE WHERE 条件
)
SELECT * FROM CTE2
UNION
SELECT T2.* FROM CTE2 T1
JOIN CTE T2 ON T1.RN+1=T2.RN
------解决思路----------------------
Declare @Date DateTime
Set @Date = 0
While (Select Count(1) From T1 Where UpdateDate > @Date) > 0
Begin
Select @Date = Min(UpdateDate) From T1 Where UpdateDate > @Date
--业务处理
End
------解决思路----------------------
按照每一页一行的规则, 用分页的方法实现吧,不要用当前行这种概念了,已经过时.