mysql 查询 select 满足给定输入范围和多个输入的所有行

mysql query to select all rows which satisfy a given input range and for multiple inputs

我需要找到满足输入值列表给定条件的行数。

假设我们有一个 table 列 id,open_date,close_date。

请求table

id  open_date      close_date
1   '2013-04-08'   '2013-04-10'
2   '2013-04-11'   '2013-04-12'
1   '2013-04-09'   '2013-04-12'
1   '2013-04-10'   '2013-04-12'

现在我想要计算满足给定输入 x 条件的行数(x 是输入列表中的值之一)使得 x>open_date 和 x < close_date.

这可以针对列表中的单个条目完成,x 如下

SELECT count(*) FROM request WHERE '2013-04-10' BETWEEN open_date AND close_date  

但是如果对于所有 x,其中 x 是列表('2013-04-10'、'2013-04-12')等中的一个条目,我该怎么做

虽然我浏览了很多 post,但找不到此类 question.Can 的答案,这可以在单个 select 查询中完成吗?

不推荐:以编程方式生成大量查询:

SELECT count(*) FROM request WHERE 
    '2013-04-10' BETWEEN open_date AND close_date OR
    '2013-05-10' BETWEEN open_date AND close_date OR
    ....
    '2015-11-4' BETWEEN open_date AND close_date

注意:这为您提供了总数。如果你想要每个日期的总数,你需要用第二种方法。

推荐,但有点复杂。将日期放在一个 table 一列中,合并它们,仅过滤出匹配的集合,然后将它们组合在一起以进行计数。

SELECT q.date, COUNT(*) FROM test_dates q, request r
    WHERE q.date BETWEEN r.open_date AND r.close_date
    GROUP BY q.date;

演示 sqlfiddle:http://sqlfiddle.com/#!9/474bb/3

编辑:

正如我认为实际要求的那样,此变体将计算范围包括任何测试日期的行数:

SELECT COUNT(*) FROM 
    (SELECT DISTINCT r.id FROM test_dates q, request r
        WHERE q.date BETWEEN r.open_date AND r.close_date) t;