SQL - 如何使用 BETWEEN (mysql) 获取一系列时间戳?
SQL - How to get a range of timestamps using BETWEEN (mysql)?
例如,如果我有两个表,communication
和 movement
,它们都有一个名为 ID
和 timestamp
的列,并且我有一个查询通常看起来像这样:
SELECT * FROM movement m
JOIN communication c
ON m.ID = c.ID
WHERE m.timestamp <= c.timestamp
ORDER BY abs(TIMESTAMPDIFF(second,ctstamp,m.timestamp))
LIMIT 1;
这会在 m.timestamp <= c.timestamp
时找到给定 movement
时间戳的最接近 communication
时间戳,即 movement timestamp
小于 communication timestamp
时。但这遗漏了所有 m.timestamp >= c.timestamp
。
我想做的是在两边创建一个大约 10 秒的范围,这样就可以了:
WHERE m.timestamp BETWEEN c.timestamp-10 secs AND c.timestamp+10 secs
所以如果 communication timestamp
是 '2012-03-02|09:02:30'
,那么它将是:
WHERE m.timestamp BETWEEN '2012-03-02|09:02:20' AND '2012-03-02|09:02:40'
那么我该如何实现呢?
任何帮助将不胜感激,谢谢!!
编辑
最后我用了这个:
WHERE m.timestamp BETWEEN TIMESTAMPADD(SECOND,-10,c.timestamp)
AND TIMESTAMPADD(SECOND,10,c.timestamp);
只需使用 interval
关键字:
WHERE m.timestamp BETWEEN c.timestamp - interval 10 second AND
c.timestamp + interval 10 second
例如,如果我有两个表,communication
和 movement
,它们都有一个名为 ID
和 timestamp
的列,并且我有一个查询通常看起来像这样:
SELECT * FROM movement m
JOIN communication c
ON m.ID = c.ID
WHERE m.timestamp <= c.timestamp
ORDER BY abs(TIMESTAMPDIFF(second,ctstamp,m.timestamp))
LIMIT 1;
这会在 m.timestamp <= c.timestamp
时找到给定 movement
时间戳的最接近 communication
时间戳,即 movement timestamp
小于 communication timestamp
时。但这遗漏了所有 m.timestamp >= c.timestamp
。
我想做的是在两边创建一个大约 10 秒的范围,这样就可以了:
WHERE m.timestamp BETWEEN c.timestamp-10 secs AND c.timestamp+10 secs
所以如果 communication timestamp
是 '2012-03-02|09:02:30'
,那么它将是:
WHERE m.timestamp BETWEEN '2012-03-02|09:02:20' AND '2012-03-02|09:02:40'
那么我该如何实现呢?
任何帮助将不胜感激,谢谢!!
编辑
最后我用了这个:
WHERE m.timestamp BETWEEN TIMESTAMPADD(SECOND,-10,c.timestamp)
AND TIMESTAMPADD(SECOND,10,c.timestamp);
只需使用 interval
关键字:
WHERE m.timestamp BETWEEN c.timestamp - interval 10 second AND
c.timestamp + interval 10 second