MySQL查询:以特定间隔获取数据

时间:2012-09-26 05:31:49

标签: mysql

我有一个带有一个日期时间列的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

提前致谢

3 个答案:

答案 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秒就会给你一次..

但是只有你有统一的参赛作品才会有效..如果你的时间戳没有均匀结束......你需要告诉我们。

修改

我想你可能正在寻找这个:

How do you select every n-th row from mysql