1

我有一张如下表:

PERSON_REF、CODE_START_DATE、CODE

PK在哪里PERSON_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 列可能为空白

4

2 回答 2

2

由于您使用的是SQL Server,请尝试使用external apply。这是查询

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 月为行添加了 where 条件

于 2012-08-29T10:27:32.873 回答
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...
于 2012-08-29T10:32:59.683 回答