Mysql 带case条件的左外连接
我的数据库有三个表Mysql 带case条件的左外连接,mysql,sql,Mysql,Sql,我的数据库有三个表 Studentdata with columns studentid , studentname Assessmentdata with columns studentid, attemptedondate Activitydata with columns studentid, date 并且每个表行都将使用当前时间戳每天更新 如果需要识别方面的帮助,Mostrecentdate列应在比较两个不同表和两个不同列中的attemptedondate和date这两个列后获取日期
Studentdata with columns studentid , studentname
Assessmentdata with columns studentid, attemptedondate
Activitydata with columns studentid, date
并且每个表行都将使用当前时间戳每天更新
如果需要识别方面的帮助,Mostrecentdate列应在比较两个不同表和两个不同列中的attemptedondate和date这两个列后获取日期。如果activitydata和assessmentdata中的列均为空,则在预期输出中打印学生id,Mostrecentdate为空,如图所示
左侧外部联接应该与studentdata表一起使用,我应该在哪里写入此内容
预期产出应为:
Studentid studentname mostrecentdate
1 abc 2013-06-01 12:05
2 def 2013-05-02 02:03
3 kjr null
My current query is:
select S.StudentId,
S.StudentAccountName,
CASE WHEN Max(D.attemptedondate) >= Max(A.date) THEN Max(D.attemptedondate)
ELSE Max(A.date) END
as MOSTRECENTDATE
from activitydata A
join Studentdata S on A.StudentId=s.StudentID
join Assessmentdata D on S. StudentID =D. StudentID
group by S.StudentId,
S.StudentAccountName
试一试
选择s.studentid、s.studentname、,
nullifGreatestCoalesca.max_日期,0,
合并b.max_日期,0,0最新中心日期
从Studentdata的左联接
选择studentid、MAXattemptedondate最大日期
根据评估数据
学生分组
a在s.studentid上=a.studentid左连接
选择studentid,MAXdate max\u date
来自Activitydata
学生分组
b在s.studentid上=b.studentid
或
样本输出:
| STUDENTID | STUDENTNAME | MOSTRECENTDATE |
-------------------------------------------------
| 1 | abc | 2013-06-01 12:05:00 |
| 2 | def | 2013-05-02 02:03:00 |
| 3 | kjr | (null) |
这里是演示试试看
选择s.studentid、s.studentname、,
nullifGreatestCoalesca.max_日期,0,
合并b.max_日期,0,0最新中心日期
从Studentdata的左联接
选择studentid、MAXattemptedondate最大日期
根据评估数据
学生分组
a在s.studentid上=a.studentid左连接
选择studentid,MAXdate max\u date
来自Activitydata
学生分组
b在s.studentid上=b.studentid
或
样本输出:
| STUDENTID | STUDENTNAME | MOSTRECENTDATE |
-------------------------------------------------
| 1 | abc | 2013-06-01 12:05:00 |
| 2 | def | 2013-05-02 02:03:00 |
| 3 | kjr | (null) |
下面是演示试试这一款:
SELECT SD.StudentID
, SD.StudentName
, CASE
WHEN MAX(IFNULL(SS.attemptedondate, '')) >= MAX(IFNULL(AC.date, '')) THEN MAX(SS.attemptedondate)
WHEN MAX(IFNULL(SS.attemptedondate, '')) < MAX(IFNULL(AC.date, '')) THEN MAX(AC.date)
ELSE NULL
END AS MOSTRECENTDATE
FROM Studentdata SD
LEFT JOIN Assessmentdata SS ON SS.StudentID = SD.StudentID
LEFT JOIN Activitydata AC ON AC.StudentID = SD.StudentID
GROUP BY SD.StudentID;
以下是答案。试试这一对:
SELECT SD.StudentID
, SD.StudentName
, CASE
WHEN MAX(IFNULL(SS.attemptedondate, '')) >= MAX(IFNULL(AC.date, '')) THEN MAX(SS.attemptedondate)
WHEN MAX(IFNULL(SS.attemptedondate, '')) < MAX(IFNULL(AC.date, '')) THEN MAX(AC.date)
ELSE NULL
END AS MOSTRECENTDATE
FROM Studentdata SD
LEFT JOIN Assessmentdata SS ON SS.StudentID = SD.StudentID
LEFT JOIN Activitydata AC ON AC.StudentID = SD.StudentID
GROUP BY SD.StudentID;
以下是.请提供与所需输出相关的示例数据在您的查询中,我找不到mostrecentdate列抱歉是mostrecenttime请提供与所需输出相关的示例数据在您的查询中,我找不到mostrecentdate列抱歉是mostrecenttime