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;
我有以下 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;