2011-12-30 11 views
2

コースに出席を追跡するテーブルがあります。列はcourseid、レッスン、personid、および日付です。私は人が関連するコース、レッスン、および人物とともに出現する最も早い日付を抽出するクエリ(下記)を持っています。これは、特定のコースを開始したときを決定し、最初のレッスンで開始したことを確認するために使用されます。これはうまく動作しますが、私が立ち往生しているところでは、コースごとにこのクエリを実行しています。例えば、特定のコースの各人がすべてのコースではなく、それを開始した最初の日付を見つけます。今はもっと一般的なクエリを実行し、それをbizレイヤーでフィルタリングしています。グループの最小値の行を選択する方法とwhere句を使用する方法

私はので、任意のタイプミスを許し、この少しの難読化:PERSON_ID、内側のクエリでにわたって

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

ジャストグループ:

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. コーステーブル:リレーション

  2. Studentテーブルとコース詳細持つlessionは:学生の詳細が含まれています。

このようにクエリが簡略化されますか。何がimmatur ... よろしく、 ウダイを鳴らした場合

申し訳

関連する問題