Что такое простой и эффективный способ найти строки с перекрытиями временного интервала в SQL?

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

29
задан Jonathan Leffler 29 November 2015 в 16:36
поделиться

2 ответа

SELECT * 
FROM table1,table2 
WHERE table2.start <= table1.end 
AND (table2.end IS NULL OR table2.end >= table1.start)
55
ответ дан Steven A. Lowe 28 November 2019 в 01:24
поделиться
select * from table_1 
right join 
table_2 on 
(
table_1.start between table_2.start and table_2.[end]
or
table_1.[end] between table_2.start and table_2.[end]
or
(table_1.[end] > table_2.start and table_2.[end] is null)
)

РЕДАКТИРОВАНИЕ: хорошо, не идите для моего решения, оно работает как дерьмо. "Где" решение 14x быстрее. Ой...

Некоторая статистика: работа дб с ~ 65 000 записей для обеих таблиц 1 и 2 (никакая индексация), имея интервалы 2 дней между запуском и концом для каждой строки, работая в течение 2 минут в SQLSMSE (не имеют терпения ожидать)

Используя соединение: 8 356 строк за 2 минуты

, Используя где: 115 436 строк за 2 минуты

2
ответ дан Casper 28 November 2019 в 01:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: