自我加入分组查询

时间:2012-08-29 10:23:26

标签: sql sql-server

我有一张表格如下:

  

PERSON_REF,CODE_START_DATE,CODE

PKPERSON_REF

我想要一个查询,向我提供CODE_START_DATE在2012年8月的记录以及最新CODE_START_DATE的记录,在此之前,即此伪代码

SELECT PERSON_REF,
       CODE_START_DATE,               --S/B in August 2012
       CODE,
       CODE_START_DATE [PrevDate],    --Latest CODE_START_DATE Prior to Column 2 in Query
       CODE [PrevCode]                --Code at Date of Column 4 in Query

如果第2列日期之前没有记录,第4列和第5列可能为空白

2 个答案:

答案 0 :(得分:2)

由于您使用的是 SQL Server ,请尝试外部应用。这是查询

SELECT T1.*, T2.CODE_START_DATE PrevDate, T2.CODE PrevCode
FROM TableName T1 
 OUTER APPLY (
     SELECT TOP 1 *
     FROM TableName T2
     WHERE T2.CODE_START_DATE < T1.CODE_START_DATE 
     ORDER BY T2.CODE_START_DATE DESC
) T2
WHERE T1.CODE_START_DATE BETWEEN '01/Aug/12' AND '01/Sep/12'

<强>更新

我在 2012年8月

中添加了行的条件

答案 1 :(得分:0)

您可以使用以下查询:

SELECT A.PERSON_REF,
       A.CODE_START_DATE,
       A.CODE,
       (Select Top 1 B.CODE_START_DATE From YourTable B Where B.CODE_START_DATE > A.CODE_START_DATE Order by CODE_START_DATE DESC)AS [PrevDate],
       (Select Top 1 B.CODE From YourTable B Where B.CODE_START_DATE > A.CODE_START_DATE Order by CODE_START_DATE DESC) AS [PrevCode]
From YourTable A
Where ..Conditions...