Найдите следующую запись по дате для человека и сравните ее с первоначальной записью - PullRequest
1 голос
/ 22 февраля 2012

У меня есть таблица среднего размера (tbl) с:

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

с примерно 20000 результатами.

Каждый идентификатор таблицы соответствует результату человека в 4 различных тестах и ​​ихperson_id.

например,

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

Мне нужно выполнить запрос, где он выбирает записи, в которых один из результатов был положительным, а остальные - отрицательными.ЛЕГКО!

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

Хитрость в том, что я хочу выяснить, какой СЛЕДУЮЩИЙ результат для этого человека, по дате , для каждой из записей, которые соответствуют критериям, указанным выше.Затем я хочу сравнить два результата и посмотреть, изменились ли результаты.т. е. resultB может измениться с «N» на «P», скажем, за 1 месяц, между результатами Джо Блоггса (вымышленное имя), и мне нужно это зафиксировать.

Я уверен, что мне нужно использовать подзапросы вдоступ к 2010, но я не могу понять, как это сделать.

1 Ответ

1 голос
/ 22 февраля 2012

Я изменил дату на дату, потому что дата является зарезервированным словом. Это только возвращает дополнительный столбец для 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 возвращает совпадающие записи, и если у человека имеется более одной записи на одну и ту же дату, более 1 запись будет возвращена первой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...