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;
我需要找到满足输入值列表给定条件的行数。
假设我们有一个 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;