sql - 从 db 获取不同范围的多个 id 的结果
问题描述
我在 db 中有许多用于时间戳的 id。例如:
id timestamp
1 '2018-11-14 10:00:00'
2 '2018-11-14 10:00:00'
3 '2018-11-14 10:00:00'
4 '2018-11-14 10:00:00'
1 '2018-11-14 10:01:00'
2 '2018-11-14 10:01:00'
3 '2018-11-14 10:01:00'
4 '2018-11-14 10:01:00'
1 '2018-11-14 10:02:00'
2 '2018-11-14 10:02:00'
3 '2018-11-14 10:02:00'
4 '2018-11-14 10:02:00'
1 '2018-11-14 10:03:00'
2 '2018-11-14 10:03:00'
3 '2018-11-14 10:03:00'
4 '2018-11-14 10:03:00'
1 '2018-11-14 10:04:00'
2 '2018-11-14 10:04:00'
3 '2018-11-14 10:04:00'
4 '2018-11-14 10:04:00'
我需要编写一个查询,例如可以选择 id= 2,3 但时间戳范围仅从 '2018-11-14 10:01:00' 到 '2018-11-14 10:02:00' 包括 id 2 和 id 3 从 '2018-11-14 10:02:00' 到 '2018-11-14 10:04:00' 如果是一条记录,它将是
SELECT id, timestamp
FROM table
WHERE id = 2
AND '2018-11-14 10:01:00' <= timestamp
AND timestamp <= '2018-11-14 10:03:00'
但是类似的多重条件呢?
UPD:手动构建查询没有问题,但是id和timestamp我是动态获取的,所以这个查询需要动态构建,之前不知道id和timestamp
解决方案
您可以简单地使用逻辑运算符的组合AND/OR
:
SELECT id, timestamp FROM table
WHERE (id = 2 AND
timestamp >= '2018-11-14 10:01:00' AND
timestamp <= '2018-11-14 10:02:00')
OR
(id = 3 AND
timestamp >= '2018-11-14 10:02:00' AND
timestamp <= '2018-11-14 10:04:00')
一种更简洁的书写方式可能是使用BETWEEN .. AND ..
:
SELECT id, timestamp FROM table
WHERE (id = 2 AND
timestamp BETWEEN '2018-11-14 10:01:00' AND '2018-11-14 10:02:00')
OR
(id = 3 AND
timestamp BETWEEN '2018-11-14 10:02:00' AND '2018-11-14 10:04:00')
编辑(基于您的编辑):为了动态构建查询,您只需使用应用程序代码准备查询字符串(例如:在 PHP、C++、Java 等中)