我有一个现有查询,它可以获取父记录以及所有子记录中的最大日期。子记录是调用的电话。现在,我被要求显示最近一次“过去”通话的日期以及任何 future “预定”通话的日期。
这是我现在使用的查询:
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;
这会将 future 的调用日期放入列表中,以逗号分隔。
编辑:
如果您只想让医生在未来安排通话,请使用 having
子句:
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;
关于MySQL:选择所有 parent 和最近 child 的日期和任何 future child 的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21317353/