如何从表A中查询处于表B时间区间内的timestamp数据?
解决方案
根据你的表结构和需求,这里分两种常见场景给出SQL查询方案:
场景1:表B的open_minute/close_minute是当天的分钟偏移量
比如open_minute=90代表当天01:30,close_minute=180代表当天03:00,这类场景需要先把表A的timestamp转换为当天的分钟数再匹配:
SELECT a.* FROM 表A a INNER JOIN 表B b ON a.user = b.user AND TIMESTAMPDIFF(MINUTE, '2023-06-06 00:00:00', a.timestamp) BETWEEN b.open_minute AND b.close_minute WHERE a.user = '用户A';
说明:
TIMESTAMPDIFF(MINUTE, '2023-06-06 00:00:00', a.timestamp)计算出timestamp距离当天零点的分钟数- 通过
INNER JOIN关联用户字段,同时过滤出时间落在目标区间内的记录
场景2:表B的open_minute/close_minute是完整时间戳
比如open_minute='2023-06-06 09:00:00',这类场景直接做区间匹配即可:
SELECT a.* FROM 表A a INNER JOIN 表B b ON a.user = b.user AND a.timestamp BETWEEN b.open_minute AND b.close_minute WHERE a.user = '用户A';
注意事项:
- 确保表A的
timestamp字段为DATETIME/TIMESTAMP类型,避免字符串格式不匹配导致错误 - 如果表B存在重叠时间区间,查询结果会包含同时落在多个区间的重复记录,需去重可添加
DISTINCT关键字:SELECT DISTINCT a.*
内容的提问来源于stack exchange,提问作者Nhat Thai
相关产品推荐
相关产品推荐

