繁体   English   中英

SQL Inner Join 仅基于过滤记录的一行

[英]SQL Inner Join only one row based on filtered records

我有以下表格

用户

ID 姓名
1 约翰
2 杰克
3 乔治

散文

ID 提交日期 用户身份 项目编号
1 2020-12-10 1 1
2 2020-05-01 2 2
3 2020-04-10 3 2

项目阶段

ID 项目编号 日期 阶段
1 1 2020-01-01 早期的
2 1 2020-05-31
3 1 2020-11-30 晚的
4 2 2020-01-01 早期的
5 2 2020-03-31
6 2 2020-04-30 晚的

1 位用户在一个项目中仅提交 1 篇论文,我想要一个组合表,显示用户和提交论文的阶段。

我正在尝试从低于 date_submitted 的 project_phase 获取 MAX 日期的记录

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

用户 提交日期 阶段
约翰 2020-12-10 晚的
杰克 2020-05-01 晚的
乔治 2020-04-10

到目前为止,我将表与 INNER JOIN 组合在一起,但以下查询返回重复记录。 我也尝试了 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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM