Вход | Регистрация

Информационные технологии :: Математика и алгоритмы

ms sql как select связать строки в одной таблице

ms sql как select связать строки в одной таблице
Я
   DES
 
30.09.18 - 14:57
MS SQL есть таблица периодов присутствия
ИД нач  кон
1 2000 2002
2 2003 2004
3 2005 2007
4 2010 1015
5 2018 2019
как найти  select-ом периоды отсутствия
2002 2003
2004 2005
2007 2010
2015 2018
 
 
   Попытка1С
 
1 - 30.09.18 - 17:41
в общем случае таблицу присутствия соединить с таблицей годов с условием not in
   Доктор Манхэттен
 
2 - 30.09.18 - 18:58
(1) Не not in, а

NOT BETWEEN `нач` AND `кон`

Но это плохое решение.
   Доктор Манхэттен
 
3 - 30.09.18 - 19:00
Лучше так:

SELECT t1.кон, t2.нач
FROM таблица_периодов t1
INNER JOIN таблица_периодов t2
ON t1.кон < t2.нач
AND t1.id + 1 = t2.id
   Sammo
 
4 - 30.09.18 - 19:01
Вопрос - а зачем искать периоды отсутствия?
   DES
 
5 - 30.09.18 - 20:25
(3) ид - условно по порядку
я отсортировал для лучшего понимания
   DES
 
6 - 30.09.18 - 20:26
() в задании первая таблица
вторая - это то что должно получиться
   Доктор Манхэттен
 
7 - 01.10.18 - 09:09
(5) Если на самом деле не по порядку, то можешь создать виртуальную или временную таблицу в которой будет точно отсортировано по датам, и использовать ее в JOIN, немного изменив запрос. Я тебе дал идею решения, ты уже сам можешь приспособить ее к своим таблицам.

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует