“ WHERE”子句不适用于这两种情况

时间:2019-08-13 21:04:54

标签: mysql sql

显示创建表:

CREATE TABLE `calls` (
   `fullname` varchar(201) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
   `lastname` text COLLATE utf8_unicode_ci,
   `firstname` text COLLATE utf8_unicode_ci,
   `call` datetime DEFAULT NULL,
   `phoneNumber` char(12) COLLATE utf8_unicode_ci DEFAULT NULL,
 ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

call存储有关用户拨打电话的日期和时间的信息

我正在尝试选择晚上8点之间至少打过三次电话的所有人。和晚上10点在上个月。

我的查询:

SELECT fullname, call, COUNT(fullname) AS NumberOfCalls
FROM calls
WHERE HOUR(call) IN (20,21) AND datediff(CURDATE(), call) < 30
GROUP BY fullname
HAVING NumberOfCalls >= 3;

查询不提供结果。

如果我发表评论/* AND datediff(CURDATE(), call) < 30 */,我会吸引所有在晚上8点至晚上10点之间打电话的人。

如果我评论/* HOUR(call) IN (20,21) AND */,我会吸引上个月来过的所有电话。

WHERE子句不适用于这两种情况,我也不明白为什么。如何使它接受两个条件?谢谢!

1 个答案:

答案 0 :(得分:1)

根据您的描述,我认为您的代码应该可以工作。 call中的SELECT是不合适的(因为它不是GROUP BY的一部分)。我建议直接比较日期/时间值:

SELECT fullname, COUNT(*) AS NumberOfCalls
FROM calls c
WHERE HOUR(call) IN (20, 21) AND call >= curdate() - interval 30 day
GROUP BY fullname
HAVING NumberOfCalls >= 3;