如何访问SQL Server 2008 R2中的select语句中的上一条记录?

时间:2014-09-06 06:21:08

标签: sql sql-server tsql sql-server-2008-r2

社区咨询,它让我查询了这些数据:

ID_KAR   ALMACEN               FECHA                    CODIGO_PROD  MONTO
----------------------------------------------------------------------------------
16275   AVIOS E INSUMOS 2011-01-01 00:00:00.000 0       ANS0001UNI  18100.0000  
39823   AVIOS E INSUMOS 2011-06-06 00:00:00.000 2       ANS0001UNI  18100.0000  
8718    AVIOS E INSUMOS 2011-01-01 00:00:00.000 0       AV-AC-766   9015.0000   
23243   AVIOS E INSUMOS 2011-01-06 00:00:00.000 2       AV-AC-766   477.0000    
23247   AVIOS E INSUMOS 2011-01-06 00:00:00.000 2       AV-AC-766   40.0000 
23255   AVIOS E INSUMOS 2011-01-06 00:00:00.000 2       AV-AC-766   35.0000 
23251   AVIOS E INSUMOS 2011-01-06 00:00:00.000 2       AV-AC-766   118.0000    

原来我需要在查询中添加一个列,但是这些数据我得到了查询的估计值。 我需要访问以前的记录来计算新的金额。

我需要访问上一条记录中的数据,如果我将自己定位在寄存器2中,我需要访问1以在寄存器2中显示新的数量。

1 个答案:

答案 0 :(得分:0)

最好的办法是使用CTE和row_number或Rank 然后在连接中执行n-1。 如下所示:

WITH 
ANSICTE
AS
(
SELECT  RANK() OVER (Partition BY Codigo_Prod ORDER BY fecha ASC ) as Ranks
,Codigo_Prod  
FROM Table
)
SELECT ANSICTE.Codigo_Prod, ANSICTE.Ranks, ANSICTE2.Fecha, ...
FROM ANSICTE
LEFT OUTER JOIN ANSICTE AS ANSICTE2
    ON ANSICTE.CODIGO_Prod = ANSICTE2.Codigo_Prod
    AND ANSICTE.Ranks = ANSICTE2.Ranks-1