[英]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.