假设我有以下两个表:
STUDENT
studentid lastname firstname
1 Smith John
2 Drew Nancy
STUDENT_STORY
studentid dateline storyid status
1 1328313600 10 2
1 1328313601 9 1
2 1328313602 14 2
2 1328313603 12 1
现在,我需要一个SQL查询,它将在学生故事表中选择每个学生沿着该学生的最新故事。
我正在尝试这个:
SELECT s.*, ss.*
FROM student AS s
LEFT JOIN (
SELECT *
FROM student_story
WHERE student_story.studentid = s.studentid
ORDER BY dateline DESC LIMIT 1
) AS ss ON (ss.studentid = s.studentid)
但是,该查询不起作用。它抱怨s.studentid在子查询的where子句中是一个未知字段。
请建议我怎样才能实现我正在努力做的事情。
谢谢。
7条答案
按热度按时间gpnt7bae1#
试试这样的方法:
bvjxkvbb2#
t3irkdon3#
yvfmudvl4#
您需要在student_story表的每一行添加一个自动且唯一的id。
然后你将区分它们。(假设studentstory.new_id)
qfe3c7zg5#
另一种方法是使用
NOT EXISTS()
条件生成LEFT JOIN
。但是,如果每个学生有两个具有相同dateline
的条目,则也会显示重复结果:hsvhsicv6#
这是一个相当冗长的查询示例,说明如何将具有相同ID(PK)的字段的最新[max()]版本连接起来,其中这些字段的最新版本可能在每个表中单独变化;例如来自表1的ID=1的最新版本,以匹配来自表2的ID=1的最新版本。
lymnna717#
此连接应执行以下操作:
GROUP BY
应该取最后一行,所以最后一个故事=最后一行,如果它不起作用,请尝试: