获取给定日期范围的ID

时间:2012-02-15 08:44:29

标签: mysql sql

 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.我不知道该怎么做。请帮忙。

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'