Мадорский Г.В. wrote:

А когда таковых больше одного - получаем multiple rows in singleton select?


А как оно там больше одного получится при условии, что диапазоны дат для каждой версии записи не пересекаются?

   Чуть ниже.

И чем битвин лучше фирста по индексу?


Select D.Num, C.Address
from Doc D
Inner Join Clients C on D.IdClient = C.IdClient and D.Dat between C.StartDt
and C.EndDt

А с фирстом еще и подзапрос рисовать придется...

  Ды ну?

Select D.Num, C.Address
 from Doc D
 Inner Join Clients C on D.IdClient = C.IdClient_Generation

a фирст нужен только для определения IdClient_Generation в момент создания документа. Если чо передалать задним числом - ну поапдейтим, не переломимся.


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


Это да. Тут сложнее. Сходи на www.ibase.ru и почитай статью про блокировки :)))


Ай, Глебушка, не надо ля-ля :) Там подвижки/сжатия/растяжения массы периодов нужны по результатам редактирования одного, какие там статьи про блокировки... Ты подумай как-нить на досуге например о календарном планировании загрузки оборудования деталями, требующими разной продолжительности обработки на разных единицах. Хотя бы в количестве трёх штук одного и двух другого. Только крышу заранее подвяжи чем-нить, чтоб не съехала незаметно ;)

--
Regards. Ded.

Ответить