Как я могу сравнить даты в связанных таблицах и использовать это, чтобы выбрать соответствующую запись в запросе? SQL / MS Access - PullRequest
1 голос
/ 31 января 2012

Детали курса меняются со временем.Мне нужно иметь возможность получить доступ к версии этих данных, которая действовала на момент проведения курса.

Мои таблицы настроены следующим образом (показаны только соответствующие поля):

Сведения о классе

  • ClassID (первичный ключ)
  • CourseID (внешний ключ)

  • Дата начала

Курсы

  • CourseID (первичный ключ)

Версии курса

  • CourseVersionID (первичный ключ)
  • CourseID (внешний ключ)

  • Дата начала версии курса

Я хочу показать одну запись для каждого уникального ClassID в запросе со следующими столбцами:

  • ClassID

  • Дата начала версии курсасразу после даты начала (см. примеры ниже)

Дата начала версии курса (1) = 01/01/2010

Дата начала версии курса (2) = 01/11/2011

Дата начала находится между (1) и (2) ~ Возвращаемое значение - 01/01/2010

Дата начала больше (2) ~ Возвращаемое значение - 01/11/2011

Дата начала меньше (1) ~ Возвращаемое значение - ничто, эта запись не отображается.

  • CourseVersionID

Решения, которые можно использовать без особых знаний SQL (т. Е. В представлении дизайна Access), являются предпочтительными, но не обязательными.

Ответы [ 2 ]

1 голос
/ 31 января 2012

Не совсем окно дизайна запроса, хотя его можно просмотреть там, и оно вернет строку, даже если дата не указана в соответствии с вашим пятым требованием.

SELECT [class details].classid,
       [class details].courseid,
       [class details].[commencement date],
       (SELECT TOP 1 [course version start date]
        FROM   [course versions]
        WHERE  courseid = courses.courseid
               AND
       [class details].[commencement date] > [course version start date]
        ORDER  BY [course version start date] DESC) AS commdate
FROM   [class details]
       INNER JOIN courses
         ON [class details].courseid = courses.courseid; 
1 голос
/ 31 января 2012

В SQL:

<code>SELECT Class.ID, 
  Max(CourseVersions.CourseVersionStartDate) AS CourseVersionStartDate
FROM 
    (Course INNER JOIN Class ON Course.CourseId = Class.CourseId)
INNER JOIN 
    CourseVersions ON Course.CourseId = CourseVersions.CourseId
WHERE 
    (((Class.CommencementDate) > CourseVersions.CourseVersionStartDate))
GROUP BY Class.ID;

Или, так как вы предпочитаете конструктор запросов доступа:

Access Query Design

...