SQL Inner Join only one row based on filtered records

SQL Inner Join only one row based on filtered records

我有以下 tables

用户

id name
1 John
2 Jack
3 George

作文

id date_submitted user_id project_id
1 2020-12-10 1 1
2 2020-05-01 2 2
3 2020-04-10 3 2

project_phase

id project_id date phase
1 1 2020-01-01 early
2 1 2020-05-31 mid
3 1 2020-11-30 late
4 2 2020-01-01 early
5 2 2020-03-31 mid
6 2 2020-04-30 late

1 位用户在一个项目中只提交了 1 篇论文 我想要一个组合 table 来显示用户和提交论文的阶段。

我正在尝试从 project_phase 获取最大日期低于 date_submitted

的记录

所以使用上面的数据我想得到

user date_submitted phase
John 2020-12-10 late
Jack 2020-05-01 late
George 2020-04-10 mid

到目前为止,我将 tables 与 INNER JOIN 组合在一起,但以下查询 returns 重复记录。我也尝试了 ROW_NUMBER() 和 MAX() 但我没有正确构建它来获得我正在寻找的答案

SELECT
    U.name,
    E.date_submitted,
    P.phase
FROM
    essay E
INNER JOIN user U ON U.id = E.user_id
INNER JOIN project_phase P ON P.project_id = E.project_id and E.date <= P.date_submitted

感谢任何帮助,谢谢。

我建议使用相关子查询:

SELECT U.name, E.date_submitted,
       (SELECT P.phase
        FROM project_phase P
        WHERE P.project_id = E.project_id AND
              P.date <= E.date_submitted 
        ORDER BY p.date DESC
        LIMIT 1
       ) as phase
FROM essay E JOIN
     user U
     ON U.id = E.user_id;