id start_date end_date
1 2012-02-05 2012-03-10
2 2012-03-05 2012-03-25
3 2012-03-19 2012-03-27
4 2012-04-01 2012-04-20
Table Name: bulbs
此表格包含有关灯泡的信息,这些灯泡在给定日期期间是灯光。如果我选择两个日期,我想获得这些日期范围的灯泡ID。例如对于'2012-02-10'和'2012-03-20'的日期,这应该返回ID - 1,2和3.我不知道该怎么做。请帮忙。
答案 0 :(得分:2)
我不知道2012-02-10和2012-02-20会如何给你ID 1,2,3,如果我理解这个权利它应该只给id 1 在这种情况下,SQL应该是
select id from bulbs where
end_date >= '2012-02-10' and
start_date <= '2012-02-20'
答案 1 :(得分:0)
select id
from bulbs
where '2012-02-10' <= start_date
and ('2012-02-20' between start_date and end_date)
答案 2 :(得分:0)
SELECT
*
FROM
bulbs
WHERE
start_date <= '2012-02-20'
AND end_date >= '2012-02-10'
但是,这种类型的查询对大量数据的速度非常慢。
这是因为(start_date,end_date)上的索引对just(start_date)的索引没有任何帮助。
提高性能的一种方法是在开始日期给出上限和下限。如果您知道start_date和end_date之间的最大天数,则可以执行此操作。
例如,如果他们的appart不超过60天,你可以这样做......
SELECT
*
FROM
bulbs
WHERE
start_date <= '2012-02-20'
AND start_date >= '2012-02-10' - 60
AND end_date >= '2012-02-10'