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