Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL中按时间字段列出的最近记录_Mysql_Time - Fatal编程技术网

MySQL中按时间字段列出的最近记录

MySQL中按时间字段列出的最近记录,mysql,time,Mysql,Time,在下面的示例中,我有一个简单的表,它有一个名为timeC的时间列。我想选择timeC在过去五分钟内的所有记录。我尝试了以下和许多变体,但都没有成功 SELECT * FROM sample_schema.`exampleTable` WHERE MINUTE(TIMEDIFF(SELECT TIME(NOW())), `timeC`)<5; 请注意,该列是TIME,而不是DATETIME或TIMESTAMP 建议?你的括号放错地方了。因此,您使用1个参数调用TIMEDIFF,使用2个参数

在下面的示例中,我有一个简单的表,它有一个名为timeC的时间列。我想选择timeC在过去五分钟内的所有记录。我尝试了以下和许多变体,但都没有成功

SELECT * FROM sample_schema.`exampleTable`
WHERE MINUTE(TIMEDIFF(SELECT TIME(NOW())), `timeC`)<5;
请注意,该列是TIME,而不是DATETIME或TIMESTAMP


建议?

你的括号放错地方了。因此,您使用1个参数调用TIMEDIFF,使用2个参数调用MINUTE。另外,您不需要使用SELECT来获取TIMENOW,您只需将该函数调用用作参数即可

SELECT *
FROM exampleTable
WHERE MINUTE(TIMEDIFF(TIME(NOW()), timeC)) < 5
有一个问题。如果在午夜后不久执行此查询,则前5分钟的时间将比前一天晚。例如,如果当前为00:02,则5分钟前的时间将为23:57,并且没有任何内容与BETWEEN表达式匹配。您需要检查以下各项:

SELECT *
FROM exampleTable
WHERE CASE 
    WHEN TIME(NOW()) >= '00:05'
        THEN timeC BETWEEN TIME(DATE_SUB(NOW(), INTERVAL 5 MINUTE)) AND TIME(NOW())
    ELSE timeC BETWEEN '00:00' AND TIME(NOW()) 
        OR
         timeC BETWEEN TIME(DATE_SUB(NOW(), INTERVAL 5 MINUTE)) AND '23:59:59'
    END

由于时间类型只包含一天中的时间,即不知道它属于哪个日期,因此我不确定您试图查询的是什么,真的:@akx,问题受到限制,因此检查的记录总是从查询运行当天的较早点开始。
SELECT *
FROM exampleTable
WHERE CASE 
    WHEN TIME(NOW()) >= '00:05'
        THEN timeC BETWEEN TIME(DATE_SUB(NOW(), INTERVAL 5 MINUTE)) AND TIME(NOW())
    ELSE timeC BETWEEN '00:00' AND TIME(NOW()) 
        OR
         timeC BETWEEN TIME(DATE_SUB(NOW(), INTERVAL 5 MINUTE)) AND '23:59:59'
    END