我有一个带有“timestamp”列的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
应该返回ids 1, 4, 7
这可以用sql语句吗?
答案 0 :(得分: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您要使用整数表示。
答案 1 :(得分:0)
select id from table where timestamp % 5 = 0
精确语法略微取决于timestamp
列的数据类型,但通常您应该能够使用模运算符。