1

データベースに3つのテーブルがあります:子供、家族、ステータスログ

子がデータベースにチェックインまたはチェックアウトされるたびに、ステータスログで更新されます。私はずっと前にこれをしました、しかし私はもうそれをする方法を理解することができないようです。3つのテーブルすべてを結合する新しいビューを作成したいのですが、ステータスログからの最新のエントリのみが必要です(最も高いIDを使用)。

たとえば、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

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

どんな助けでもいただければ幸いです!

4

2 に答える 2

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
于 2012-04-15T01:04:08.577 に答える
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

構文エラーを修正します。

于 2012-04-15T02:53:33.197 に答える