首页 > 解决方案 > 从 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

标签: sql

解决方案


您可以简单地使用逻辑运算符的组合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 等中)


推荐阅读