2012-04-15 12 views
1

を使用した3テーブルを結合します。私はこれまでずっとこれをやったことがありますが、もはやこれをやる方法を理解できないようです。私はすべての3つのテーブルを結合する新しいビューを作成したいが、私はstatuslogから最新のエントリだけを(最高のIDを使用して)欲しい。は、私は私のデータベース内に3つのテーブルを持っている最新の行

例えば、statuslogは次のようになります。

childID  researcher  status  id 
1   Dr. A   out  1 
1   Dr. A   in   2 
1   Dr. B   out  3 
1   Dr. B   in   4 
2   Dr. C   out  5 
2   Dr. C   in   6 
3   Dr. B   out  7 
3   Dr. B   in   8 

これは私が何をしたいです:

SELECT * 
FROM children, families, statuslog 
WHERE children.familyID = families.familyID AND children.childID = statuslog.childID 

明らかに、これはすべての単一のログエントリに結合された子供+家族のタプルを返します。しかし、最新のログエントリと組み合わせるしか方法は思い出せません。

助けていただけたら幸いです!

答えて

2

max(id)を含む集計クエリは、childIDが指定された最後のIDを取得します。これはstatuslogに結合され、他の列を取得します。

SELECT * 
FROM children 
INNER JOIN families 
    ON children.familyID = families.familyID 
INNER JOIN 
(
    SELECT childID, researcher, status 
    FROM statuslog 
    INNER JOIN 
    (
     SELECT childID, max(ID) ID 
     FROM statuslog 
     GROUP BY childID 
    ) lastSL 
    ON statuslog.childID = lastSL.childid 
    AND statuslog.ID = lastSL.ID 
) sl 
    ON children.childID = sl.childID 
+0

ちょうどオフィスに戻って、これを試しました。完璧に働いて、まさに私が探していたものでした。ニコラありがとう! –

0

これはid高いが最新として解釈される典型的であると思われます。このクエリは、トリックを行う必要があります:

select * from (
    select s1.* from statusLog s1 
    left join statusLog s2 
    on s1.childId = s2.childId and s1.id < s2.id 
    where s2.id is null 
) final 
join children c on c.childId = final.childId 
join families f on f.familyId = c.familyId 

構文上の誤りを修正してください。

関連する問題