所以我试图运行一个将选择的查询,在这种情况下,没有预约的客户是X时间(例如2周).它归结为“向我展示一个未在2周内预约的客户名单”.我试图通过做类似的事情来解决这个问题:
$date = new DateTime; $ago = new DateInterval('P2W'); $target = $date->sub($ago); //query to select clients that aren't scheduled after the $target date $clients = ...;
涉及两个表,appt_tbl和clients_tbl. appt_tbl为每个约会记录存储client_id.
基本上我需要的是为每个客户选择“最大”约会,如果它是<我的$target日期,将它们包含在查询结果中.我尝试了各种各样的查询,查询子查询,但我很难找到正确的查询. 我目前的尝试看起来像:
SELECT * FROM clients_tbl INNER JOIN ( SELECT client_id FROM appt_tbl WHERE MAX(appt_date_time) < '2012-07-22' GROUP BY client_id ) appts ON appts.client_id = clients_tbl.client_id;
SELECT a.* FROM clients_tbl a LEFT JOIN appt_tbl b ON a.client_id = b.client_id AND b.appt_date_time >= CURDATE() - INTERVAL 2 WEEK WHERE b.client_id IS NULL
此查询首先执行的操作(在WHERE过滤之前)选择所有客户端,无论他们是否具有超过两周前的预定约会.
如果客户端没有超过两周的约会,则联接表中的值将为NULL.我们希望连接条件不满足的所有行(即连接表中的值为null),这是通过WHERE b.client_id IS NULL完成的.
这也包括完全没有任何相应约会的结果集客户.
未来有约会的客户将被排除在外.