Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Пересечение промежутков дат [D5, MSSQL]


Страницы:   1 2

MakNik ©   (2005-05-27 10:43:00) 

есть 2 таблицы, содержащие промежутки дат:
Tab1:

DateBegin  | DateEnd  |  Factor
-------------------------------
01.04.2005  | 30.04.2005 |  1
01.05.2005  | 31.05.2005 |  2
...

Tab2:
DateBegin  | DateEnd  |  PR
-------------------------------
01.04.2005  | 15.04.2005 |  20
16.04.2005  | 15.05.2005 |  25
16.05.2005  | 31.05.2005 |  30
...

Помогите, пожалуйста, написать запрос, чтобы получить следующее пересечение таблиц 1 и 2:

Tab3:
DateBegin  | DateEnd  |  Factor  |  PR
--------------------------------------
01.04.2005  | 15.04.2005 |  1  |  20
16.04.2005  | 30.04.2005 |  1  |  25
01.05.2005  | 15.05.2005 |  2  |  25
16.05.2005  | 31.05.2005 |  2  |  30


Danilka   (2005-05-27 11:34:00) [21]

[16] MakNik   (27.05.05 11:32)
См [15], только в рез. DateBegin надо брать максимальное из T1.DateBegin и T2.DateBegin, а DateEnd - наоборот минимальное. Тогда получится один в один с твоим сабжевым примером.


MakNik   (2005-05-27 11:32:00) [22]


> Johnmen ©   (27.05.05 11:20) [12]


для каждого промежутка времени нужно получить все возможные варианты значений Factor и PR.


Danilka   (2005-05-27 11:30:00) [23]

что-то типа:
SELECT
 T1.DateBegin, T1.DateEnd, T2.DateBegin, T2.DateEnd,
 T1.Factor, T2.PR
FROM Tab1 T1, Tab2 T2
WHERE T1.DateBegin BETWEEN T2.DateBegin AND T2.DateEnd
OR T1.DateEnd BETWEEN T2.DateBegin AND T2.DateEnd

?
правда, кажись, нет в МС-Скуле Ороклового GREATEST и LEAST, чтобы из четырех полей с датами в резулитующем наборе собрать два.
:)


sniknik   (2005-05-27 11:25:00) [24]

а мне интересно по какой логике берутся поля DateBegin/DateEnd то из первой то из второй таблици.


MakNik   (2005-05-27 11:23:00) [25]


> paul_k ©   (27.05.05 11:10) [9]

именно это и нужно реализовать


Johnmen   (2005-05-27 11:20:00) [26]

>paul_k ©   (27.05.05 11:10) [9]

Взяли из 1, пересекли, получили N пересечений с PR = 20 и 30.
Так куда теперь девать 20 и 30 ? Какое из них нам надо ?

ЗЫ Задача о пересечении отрезков решается несложно. Весь вопрос в остальных полях...


ANB   (2005-05-27 11:17:00) [27]

Это обычное пересечение интервалов. Если нужно что то другое - нужно подробнее писать ТЗ.


paul_k   (2005-05-27 11:11:00) [28]


> ANB ©   (27.05.05 11:10) [8] [Новое
> сообщение][Ответить]

не настолько однозначно...


paul_k   (2005-05-27 11:10:00) [29]

берем интервал из таблицы 1 и значение фактор
пересекаем со всеми значениями из таблицы 2 пересекающимися с ним
получаем первые две строчки
берем второй интервал из таблицы один и делаем тож самое
задачка то интересная.. надо попробовать порешать


ANB   (2005-05-27 11:10:00) [30]

CREATE TABLE TBL1
(
 D1  DATE,
 D2  DATE,
 N1  NUMBER
)

CREATE TABLE TBL2
(
 D1  DATE,
 D2  DATE,
 N2  NUMBER
)

select * from tbl1, tbl2
where tbl1.d1 < tbl2.d2 and tbl1.d2 > tbl2.d1  

Выбор дат DateBegin и DateEnd сделай через case


sniknik   (2005-05-27 11:05:00) [31]

paul_k ©   (27.05.05 11:01) [5]
обьясни ты, если понял. я вот тоже чтото не "врубаюсь". как ни смотрел не понимаю что с чем пересекается. (логика) если дополнительно смотреть на значения Factor и PR.


sniknik   (2005-05-27 11:03:00) [32]

> Теперь на пальцах расскажи логику.
;о)))
Купил новую мясорубку.
Вчера пробовал.
Наконец-то понял, что означает фраза: "Объясни мне на пальцах, как оно работает".

> ... в общем нужно получить все возможные пересечения значений из Tab1 с Tab2
это не все, все, это будет простой запрос с гетерогенным обьедением (те. без усекающих условий)
типа того
SELECT * FROM Tab1, Tab2
но это будет явно отличатся от Tab3, и очень сильно...


paul_k   (2005-05-27 11:01:00) [33]


> Johnmen ©   (27.05.05 10:51) [2]

логику он вроде написал
насколько я вижу там перечечение интервалов
то есть если интервалы пересекаются то берет наиболее позднее начало из наиболее раннее окончание из двух инетрвалов.


Johnmen   (2005-05-27 11:00:00) [34]

Абсолютно непонятно.
Напр. что д.б. в итоге в Factor и PR.


MakNik   (2005-05-27 10:56:00) [35]


> Теперь на пальцах расскажи логику.

... в общем нужно получить все возможные пересечения значений из Tab1 с Tab2


Johnmen   (2005-05-27 10:51:00) [36]

Хорошо.
Теперь на пальцах расскажи логику.


Paul_K   (2005-05-27 10:49:00) [37]

жать F1 читать про  конструкцию CASE


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо