Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL:选择所有父项和最近子项的日期以及任何未来子项的日期_Mysql - Fatal编程技术网

MySQL:选择所有父项和最近子项的日期以及任何未来子项的日期

MySQL:选择所有父项和最近子项的日期以及任何未来子项的日期,mysql,Mysql,我有一个现有的查询,该查询获取父记录加上任何子记录中的最大日期。子记录是通过调用来实现的。我现在被要求显示最近一次“过去”通话的日期和任何未来“预定”通话的日期 以下是我现在使用的查询: SELECT doctor.*, contact.date_scheduled FROM doctor LEFT JOIN contact ON doctor.doctorID = contact.doctorID AND date_scheduled = (SELECT MAX(date_schedule

我有一个现有的查询,该查询获取父记录加上任何子记录中的最大日期。子记录是通过调用来实现的。我现在被要求显示最近一次“过去”通话的日期和任何未来“预定”通话的日期

以下是我现在使用的查询:

SELECT doctor.*, contact.date_scheduled
FROM doctor 
LEFT JOIN contact ON doctor.doctorID = contact.doctorID 
AND date_scheduled = (SELECT MAX(date_scheduled) FROM contact WHERE doctor.doctorID = contact.doctorID)
ORDER BY date_scheduled DESC

有人能告诉我如何修改此查询以获得上述两个日期吗?

我想这就是您想要的:

SELECT d.*,
       max(case when c.date_scheduled < now() then c.date_scheduled end) as MostRecentCall,
       group_concat(case when c.date_scheduled >= now() then c.date_scheduled end) as FutureCalls
FROM doctor d left join
     contact c
     on d.doctorID =  c.doctorID
GROUP BY d.doctorId;

谢谢你,戈登。我喜欢这个。你能帮我做个小调整吗?这仅选择有未来呼叫计划的父级。我需要让所有家长都知道,即使将来没有安排任何通话。戈登,我刚刚将“未来通话”查询中的“通话组”更改为“最大值”……我可以假设将来只安排一次通话。事实上……我道歉。“我的编辑”并没有解决查询仅返回将来计划有子(联系人)记录的父记录的问题。我仍在努力解决这个问题。你能帮忙吗?戈登,我真的很感谢你在这方面的帮助,很抱歉我说的不清楚……我想这应该可以……我需要所有的医生记录,不管他们是否有任何通话记录。如果有过去的通话记录,我需要最近一次的日期,如果有未来的预定通话,我也需要它的日期。如果你能帮我做到这一点……今天会是个好日子。谢谢。@CameronS。这就是原始查询应该做的事情。它缺少d.DoctorID的
组,因此这可能是一个问题。
SELECT d.*,
       max(case when c.date_scheduled < now() then c.date_scheduled end) as MostRecentCall,
       group_concat(case when c.date_scheduled >= now() then c.date_scheduled end) as FutureCalls
FROM doctor d left join
     contact c
     on d.doctorID =  c.doctorID
GROUP BY d.doctorId
HAVING sum(c.date_scheduled >= now()) > 0;