2011-12-30 1 views
2

У меня есть таблица, которая отслеживает посещаемость курса. Столбцы - это курс, уроки, персонажи и дата. У меня есть запрос (ниже), который извлекает самую раннюю дату, когда появляется человек вместе с соответствующим курсом, уроком и персонажем. Это используется, чтобы определить, когда человек начал конкретный курс и убедиться, что он начал с первого урока. Это отлично работает, но там, где я застрял, выполняется этот запрос за курс. Например, нахождение первого свидания каждого человека в определенном курсе началось, а не для каждого курса. Прямо сейчас я просто запускаю более общий запрос и фильтрую его в слое biz.Как выбрать строку минимального значения группы, а также использовать оператор where

Я затемненное это немного, так что простите опечатки:

select a.courseid, 
     a.lesson, 
     a.personid, 
     a.thedate 
from (select personid, 
      min(thedate) as earliestdate 
     from attendance 
     group by personid) as x 
inner join attendance as a on (a.personid = x.personid and a.thedate = x.thedate) 

ответ

5

Просто группу по person_id, курс внутреннего запроса:

select a.courseid, a.lesson, a.personid, a.thedate 
from (
    select personid, courseid, min(thedate) as earliestdate 
    from attendance 
    group by personid, courseid 
) as x 
inner join attendance as a 
    on (a.personid = x.personid and 
     a.thedate = x.thedate and 
     a.courseid=x.course_id) 
0

У меня есть небольшое сомнение здесь. В настоящее время вся информация хранится в едином объекте/таблице данных. Как это будет, если у нас есть другая модель данных, как показано ниже ...?

Objext1:

  1. курса стола: Детали курса, имеющая Lession с соотношением

  2. Student таблица: Содержит детали студента.

Будет ли запрос упрощенным таким образом ....?

Извините, если что-нибудь звуки immatur ... С уважением, Удай