这是与this相关的查询,但它涉及 3 个表而不是 2 个。
我们有 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
我们希望能够根据最高 EventType 序列而不是事件 ID 提取人员列表。
因此,报告将是:
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;
我看到它的方式是子查询试图找到比主查询更高的序列,因此只允许主查询返回最高序列的事件。
我将输入提供的答案,看看其中一个是否会提供更整洁的解决方案。