2014-09-06 88 views
1

社區諮詢,這使我想到我的查詢這樣的數據:如何訪問以前的記錄在SQL Server 2008 R2的select語句?

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.

+0

您的問題不夠清楚,無法解釋您的期望。您可以執行Group by或SUM()或計算列或子查詢,這可能對您的情況有用。爲您的問題添加更多信息。 – RajeshKannan 2014-09-06 06:26:02

+0

您是否正在尋找的「過去排」(即使是在一個表中沒有行的順序...)或總量;「以前行」的參考? – Lmu92 2014-09-06 10:21:26

+0

對不起,我沒有正確解釋它,我需要什麼是當從第二個列表中比較產品代碼與ASN001 ASN001 ASN001以前的記錄,並作出與所有記錄相同的比較。 – Hernando 2014-09-06 14:30:27

回答

0

最好的辦法是使用一個CTE和ROW_NUMBER或排名 然後做在加入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 
+0

SQL Server 2012支持領先和滯後功能,那些將來會更好,但現在... – 2014-09-06 21:52:58