6

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

提前致谢

4

3 回答 3

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' )
);
于 2012-09-26T06:26:49.227 回答
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 和当前 colDate 之间的差异等于或大于间隔,则将其包括在内。

于 2012-09-26T06:06:59.850 回答
0

WHERE timestamp LIKE '%:30:00%'每 30 秒就会得到你..

但这只有在您有统一的条目时才有效..如果您的时间戳不是全部均匀结束..您需要让我们知道。

编辑

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

你如何从mysql中选择每n行

于 2012-09-26T05:39:33.080 回答