LEFT JOIN on Max Value

aka*_*sky 16 mysql left-join

假设我有以下两个表:

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
Run Code Online (Sandbox Code Playgroud)

现在,我需要一个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)
Run Code Online (Sandbox Code Playgroud)

但是,此查询不起作用.它抱怨s.studentid是子查询的where子句中的未知字段.

请建议我如何实现我想要做的事情.

谢谢.

Det*_*roc 24

尝试这样的事情:

SELECT
  s.*,
  ss.*
FROM
  student AS s
LEFT JOIN
  student_story AS ss
ON (ss.studentid = s.studentid)
WHERE ss.dateline = (
  SELECT
    MAX(dateline)
  FROM
    student_story AS ss2
  WHERE
    ss2.studentid = s.studentid
)
Run Code Online (Sandbox Code Playgroud)

  • 现在,当我想到这一点时,如果有多个具有相同时间戳的条目,这可能会返回同一个学生两次,所以可能不要使用它。 (2认同)

Nam*_*mal 8

SELECT 
    s.sale_id,
    s.created_at,
    p.created_at,
    DATEDIFF(p.created_at, s.created_at) AS days
FROM
    pos_sales s
        LEFT JOIN
    pos_payments p ON p.sale_id = s.sale_id
        AND
    p.created_at = (SELECT 
            MAX(p2.created_at)
        FROM
            pos_payments p2
        WHERE
            p2.sale_id = p.sale_id)
Run Code Online (Sandbox Code Playgroud)