0

これはこれに関連するクエリですが、2 つではなく 3 つのテーブルが含まれます。

3 つのテーブルがあります。


People:
personid, name

PeopleEvents:
personid,eventid,eventdate

EventTypes:
eventid,eventname,eventsequence

テーブルには次のようなデータが含まれます。


People:
1,John
2,Mary
3,Jane
4,Rob

PeopleEvents:
1,100,1/1/2013
2,100,2/2/2013
2,102,2/3/2013
2,104,3/3/2013
3,100,4/4/2013
3,102,4/4/2013
4.100,2/2/2013
4,103,4/4/2013
4,104,3/3/2013

EventTypes:
100,Joined company,10
101,Induction,20
102,Introduction,17
103,Second meeting,25
104,First meeting,15

イベント ID ではなく、最高の EventType シーケンスに基づいて人のリストを取得できるようにしたいと考えています。

したがって、レポートは次のようになります。


John,Joined Company
Mary,Introduction
Jane,Introduction
Rob,Second meeting

これは私にはエレガントではないようですが、うまくいくようです:


SELECT p.personid,et.eventname FROM people p 
INNER JOIN peopleevents pe ON p.personid = pe.personid
INNER JOIN eventtypes et ON et.eventid = pe.eventid
WHERE p.personid NOT IN
(SELECT p1.personid FROM people p1 LEFT JOIN peopleevents pe1 ON p1.personid = p.personid
LEFT JOIN eventtypes et1 ON et1.eventid = pe1.eventid
WHERE p1.personid = p.personid AND et1.eventseq > et.eventset) ORDER BY p.name;

サブクエリがメインクエリよりも上位のシーケンスを見つけようとしているため、メインクエリだけが最高のシーケンスイベントを返すことができるようになっています。

提供された回答を入力して、そのうちの1つがより適切なソリューションを提供するかどうかを確認します.

4

4 に答える 4