我有一个带有一个日期时间列的MySQL表。我想防止PHP脚本获取大量数据。所以我正在寻找一个解决方案,MySql查询只选择距离为1分钟或其他的行。有什么简单的东西,或者我每次都需要用新的mysql查询编写for循环。
Example
timestamp
2012-09-25 00:00:00-->
2012-09-25 00:00:50
2012-09-25 00:01:23
2012-09-25 00:01:30-->
2012-09-25 00:02:33
2012-09-25 00:02:40
2012-09-25 00:03:01-->i want those
提前致谢
答案 0 :(得分:1)
试试这个
SET @time := '1000-01-01 00:00:00';
SET @interval := 60;
SELECT colDate
FROM table
WHERE TIMESTAMPDIFF( SECOND, @time, colDate ) >= @interval
AND @time := colDate
工作原理。
@interval是当前和之前colDate之间所需的时间差。 TIMESTAMPDIFF中的第一个参数确定间隔将使用的时间单位。例如:第二,每分钟,每小时,每周,每周,每月,每年或每年。
@time跟踪前一个colDate,并将其与当前行进行比较。如果先前和当前colDate之间的差异等于或大于间隔,则包含它。
答案 1 :(得分:1)
试试这个:
SELECT create_time
FROM timeTable
WHERE create_time
IN (
SELECT min( create_time )
FROM timeTable
GROUP BY FROM_UNIXTIME( UNIX_TIMESTAMP( create_time ) - MOD( UNIX_TIMESTAMP( create_time ) , 60 ) );
工作原理:
i)按日期时间对表格进行分组舍入到此处的间隔,1分钟(60秒)。
ii)获取每组的第一行。
这可能是您数据的良好采样标准。 此查询可以在以下几点进行优化:
i)为date = REQUIRED DATE设置where子句,然后在小时+分钟而不是整个日期时间执行其他操作。
ii)如果您的间隔是1分钟,那么也可以尝试使用时间戳或date_format的子字符串将其四舍五入到最接近的分钟。
例如。
SELECT create_time
FROM timeTable
WHERE create_time
IN (
SELECT min( create_time )
FROM timeTable
GROUP BY DATE_FORMAT( `create_time` , 'Y-M-D %H:%i' )
);
答案 2 :(得分:0)
WHERE timestamp LIKE '%:30:00%'
每隔30秒就会给你一次..
但是只有你有统一的参赛作品才会有效..如果你的时间戳没有均匀结束......你需要告诉我们。
修改强>
我想你可能正在寻找这个: