2015-09-03 2 views
0

Я пытаюсь найти ближайшую следующую дату для каждой даты на ID. Каждый идентификатор в основном списке (T1) может иметь несколько дат, и для каждого из них я хочу вернуть ближайшую следующую дату в отдельной таблице (T2).Ближайшая дата на id

Первичная таблица Мне нужны ближайшие даты;

T1

PID ES Date 
16 03/09/2009 
17 29/07/2009 
17 26/01/2012 
18 19/02/2010 

таблица с несколькими записями на ID

T2

SERVICEID PID APPOINTMENT 
14   16 03/09/2009 
14   16 14/09/2009 
14   16 21/09/2009 
20   17 22/07/2009 
20   17 06/08/2009 
20   17 22/10/2009 
20   17 24/11/2009 
20   17 05/01/2010 
38402  17 25/01/2012 
38402  17 21/02/2012 
38402  17 03/04/2012 
38402  17 08/05/2012 
17   18 01/10/2009 
4982  18 16/02/2010 
6499  18 28/04/2010 
6499  18 12/05/2010 
6499  18 16/06/2010 
6499  18 15/07/2010 

То, что я хотел бы вернуться T3

PID ES Date  SERVICEID APPOINTMENT 
16 03/09/2009 14   03/09/2009 
17 29/07/2009 20   22/07/2009 
17 26/01/2012 38402  25/01/2012 
18 19/02/2010 6499  28/04/2010 

Я рассмотрел ряд вопросов, связанных с использованием DATEDIFF, ABS, MIN, но не могу получить что-то, что я хочу. Я использую MSAccess 2010.

+1

выбрать один: MySQL или доступ и исправить свои метки – amdixon

ответ

0

Сделайте соединение, используйте WHERE, чтобы вернуть только минимальную следующую дату.

select t1.PID, t1.ES, t1.Date, 
     t2.SERVICEID, t2.APPOINTMENT 
from t1 join t2 on t1.pid = t2.pid 
where t2.date = (select min(date) from t2 
       where date > t1.date 
        and pid = t1.pid) 
+0

вы можете explaine, что «мин (дата)» относится тоже. Это поле или функция A. Thx's for your time –

+0

Я попытался преобразовать ваш код, чтобы он работал на Access, но я получаю сообщение об ошибке с соединением. «SELECT \t T1. [Идентификатор пациента], \t \t T1. [Дата Направление Полученное], \t \t T1. [ES Дата], \t \t T2.SERVICEID, \t \t T2.APPOINTMENT \t \t ОТ (Т1 \t \t \t INNER JOIN T2 T1 ВКЛ. [ID пациента] = T2.LPTID \t \t \t \t \t \t \t ГДЕ T2.APPOINTMENT = \t (SELECT MIN (дата) от T2 \t \t \t \t \t \t \t \t \t ГДЕ дата> Т1. [ES Дата] \t \t \t \t \t \t \t \t \t И T2.LPTID = T1. [Идентификатор пациента]) –

+0

Это столбец даты t2, поэтому предположим, что он должен быть min (t2. [Date]). Извините, но я не очень хорошо знаю Access SQL. – jarlh