получить идентификаторы для заданного диапазона дат - PullRequest
2 голосов
/ 15 февраля 2012
 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

Здесь эта таблица содержит информацию о лампочках, которые горят в течение заданного периода времени.Если я выберу две даты, я хочу получить в настоящее время идентификаторы лампочек освещения для этого диапазона дат.например, для дат «2012-02-10» и «2012-03-20» это должно вернуть идентификаторы - 1,2 и 3. Я понятия не имею, как это сделать.пожалуйста помоги.

Ответы [ 3 ]

2 голосов
/ 15 февраля 2012

Я не понимаю, как 2012-02-10 и 2012-02-20 дадут вам идентификаторы 1,2,3, если я правильно понимаю, это должно дать только идентификатор 1, в этом случае SQL должен быть

select id from bulbs where
end_date >= '2012-02-10' and
start_date <= '2012-02-20'
0 голосов
/ 15 февраля 2012
SELECT
  *
FROM
  bulbs
WHERE
  start_date <= '2012-02-20'
  AND end_date >= '2012-02-10'

Этот тип запроса, однако, очень медленный на больших объемах данных.

Это потому, что индекс on (start_date, end_date) не помогает больше, чем индекс только(start_date).

Один из способов повысить производительность, чтобы установить как верхний, так и нижний предел даты начала.Это можно сделать, если вы знаете максимальное количество дней между start_date и end_date.

Если, например, они никогда не превышают 60 дней, вы можете сделать это ...

SELECT
  *
FROM
  bulbs
WHERE
      start_date <= '2012-02-20'
  AND start_date >= '2012-02-10' - 60
  AND end_date   >= '2012-02-10'
0 голосов
/ 15 февраля 2012
select id 
from bulbs
where '2012-02-10' <= start_date
and ('2012-02-20' between start_date and end_date)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...