MySQL:选择所有 parent 和最近 child 的日期和任何 future child 的日期

标签 mysql

我有一个现有查询,它可以获取父记录以及所有子记录中的最大日期。子记录是调用的电话。现在,我被要求显示最近一次“过去”通话的日期以及任何 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/

相关文章:

MySQL查询检索全优学生姓名

mysql - 通过过滤器搜索在datagridview中显示多个值

mysql - 自动增量在表中无法正常工作

mysql - 插入记录时对多个表进行约束检查

mysql - SELECT with Limit in SQL 搞乱了行的顺序

php - 传递 PHP 变量 onclick

php - 基于动态选择填充选择字段

mysql - 多列分组依据

sql - 为 DATE_SUB 的单元参数使用存储过程参数

php - Codeigniter 事务测试失败