按日期查找人员的下一条记录,并将其与初始记录进行比较

时间:2012-02-22 12:12:25

标签: sql ms-access

我有一个中等大小的表(tbl):

id, 
person_id, 
date, 
resultA, 
resultB, 
resultC, 
resultD 

有大约20000个结果。

表中的每个id对应于一个人在4个不同测试中的结果及其person_id。

e.g。

id 1 
person_id 2 (Joe Bloggs (made up name)) 
result on date (01/01/2012) 
A positive, 
B negative, 
C negative, 
D negative

我需要执行一个查询,它选择其中一个结果是正数而其余结果为负数的记录。 EASY!

SELECT id, person_id, date, resultA, resultB, resultC, resultD 
FROM tbl 
WHERE resultA = "P" AND resultB = "N" AND resultC = "N" AND resultD = "N"

棘手的一点是,我想找出符合上述条件的每条记录,该人的NEXT结果按日期。然后,我想比较两个结果,看看结果是否已经改变。也就是说,结果B可能会在1个月内从“N”变为“P”,在Joe Bloggs(组成名称)结果之间,我需要捕获它。

我确信我需要在Access 2010中使用子查询,但我无法理解如何做到这一点。

1 个答案:

答案 0 :(得分:1)

我已将日期更改为日期,因为日期是保留字。这仅返回ResultA的额外列,但可以为每个结果重复子查询。

SELECT a.id,
       a.person_id,
       a.adate,
       a.resulta,
       a.resultb,
       a.resultc,
       a.resultd,
       (SELECT TOP 1 b.resulta
        FROM   tbl b
        WHERE  b.person_id = a.person_id
               AND b.adate > a.adate
        ORDER  BY b.adate, b.id) AS res
FROM   tbl AS a
WHERE  a.resulta = "P"
       AND a.resultb = "N" 
       AND a.resultc = "N" 
       AND a.resultd = "N" 

我根据评论编辑了ORDER BY b.adate以包含b.id。 Access返回匹配的记录,如果一个人在同一天有多个记录,Top 1将返回多个记录。