所以我试图运行一个将选择的查询,在这种情况下,没有约会的客户是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;
这还应该包括从未安排过的客户(IE不会出现在appt_tbl中),而不包括在接下来两周内预约的客户。
答案 0 :(得分:11)
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
完成的。
这也包括完全没有任何相应约会的结果集客户。
将来排除有约会的客户。
也没有必要在PHP中构造日期时间字符串。您可以直接在查询中执行此操作(尽管您可以将周数作为参数传递)。
答案 1 :(得分:1)
我认为这可能很简单。
select users from time_sheet where created_date >= date('2013-12-01');
在你的情况下,你必须这样做。 而不是这个
WHERE MAX(appt_date_time) < '2012-07-22'
这样做
WHERE MAX(appt_date_time) < date('2012-07-22')
这实际上是日期比较,之前的一个是字符串比较日期。
干杯!!