当前位置: 代码迷 >> Sql Server >> 存储过程中怎么取当前行的下一条数据
  详细解决方案

存储过程中怎么取当前行的下一条数据

热度:96   发布时间:2016-04-24 09:15:52.0
存储过程中如何取当前行的下一条数据
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
------解决思路----------------------
按照每一页一行的规则, 用分页的方法实现吧,不要用当前行这种概念了,已经过时.
  相关解决方案