SQL для выбора на основе перекрывающихся времен - PullRequest
2 голосов
/ 24 мая 2011

Я даже не уверен, как сформулировать этот вопрос. У меня есть представление о времени начала и окончания события. Я хочу знать, сколько есть параллельных событий. Имеется в виду за последние 7 дней, сколько событий произошло одновременно и, вообще, какое это было время.

SELECT dateCreated, dateEnded, ( SELECT COUNT(*) 
                                 FROM vw_LeadTime vw2 
                                 WHERE vw2.dateCreated >= vw.dateCreated 
                                 AND vw2.dateCreated <= vw.dateEnded )
                                 AS CountInTimePeriod
FROM vw_LeadTime vw
WHERE vw.dateEnded IS NOT NULL  
AND vw.dateCreated > '5/17/2011'

Это довольно уродливо, но, похоже, работает. Есть ли более чистый (или более быстрый) способ сделать это? Я делаю это слишком сложно?

1 Ответ

2 голосов
/ 25 мая 2011

Ваш текущий sql только выбрать события, которые начались во время другого события. Вы пропустите тот, который начался до другого события, но закончился во время или после него. Правильнее было бы:

SELECT dateCreated, dateEnded, ( SELECT COUNT(*) 
                                 FROM vw_LeadTime vw2 
                                 WHERE vw2.dateEnded >= vw.dateCreated 
                                 AND vw2.dateCreated <= vw.dateEnded )
                                 AS CountInTimePeriod
FROM vw_LeadTime vw
WHERE vw.dateEnded IS NOT NULL  
AND vw.dateCreated > '5/17/2011'

Обычно два периода A-B и C-D перекрываются, когда A<=D AND B>=C

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...