1

我有一个带有“时间戳”列的 mysql 表。

现在我想选择彼此相差 5 分钟的元素。

简化示例:

id   |    timestamp
===================
1    |    00:00
2    |    00:01
3    |    00:03
4    |    00:05
5    |    00:07
6    |    00:09
7    |    00:15

应该返回ID1, 4, 7

用sql语句可以吗?

4

2 回答 2

1

这是一个解决方案,无论第一个时间戳是什么,它都应该有效。

SELECT id, ts FROM (
SELECT 
IF(UNIX_TIMESTAMP(ts) = @prev OR UNIX_TIMESTAMP(ts) % 300 = @prev % 300, @mybool:=1, @mybool:=0) AS mybool,
IF(@mybool = 1, @prev:=UNIX_TIMESTAMP(ts), @prev:=@prev),
t.*
FROM Table2 t,
(SELECT @prev:=(SELECT MIN(UNIX_TIMESTAMP(ts)) FROM Table2 sqt), @mybool:=1) vars
ORDER BY id
) sq 
WHERE mybool = 1;

看到它在sqlfiddle中工作。

如果第一个时间戳是 '00:00' 你可以简单地做

SELECT * 
FROM Table1
WHERE UNIX_TIMESTAMP(ts) % 300 = 0
ORDER BY id;

但是您必须与之UNIX_TIMESTAMP()合作才能使其发挥作用。时间戳作为 32 位整数存储在数据库中,但您仍然必须告诉 MySQL 您想要使用整数表示。

于 2013-06-11T09:38:02.757 回答
0
select id from table where timestamp % 5 = 0

精确的语法在一定程度上取决于timestamp列的数据类型,但通常你应该能够使用模运算符来做到这一点。

于 2013-06-11T08:45:04.317 回答