我有一个中等大小的表(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中使用子查询,但我无法理解如何做到这一点。
答案 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将返回多个记录。