Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Найти пересечения периодов с наложением  [new]
Galyamov Rinat
Member

Откуда:
Сообщений: 658
Есть функции, возвращающие табличные значения за конкретный период (с 01.02.2014 по 28.02.2014)

Первая возвращает "действующие трубы" для конкретной услуги на конкретном адресе (индентификатор услуги/адреса id_Usluga)
Вторая возвращает "действующие приборы учета", установленные на этих трубах

Необходимо найти все периоды, когда не было действующих труб (ни одной) или хотя бы на одной трубе (из всех действующих труб в этот период) не было действующего прибора.


При наборе данных:
declare @truba table (id bigint, id_Usluga bigint, Period_Begin date, Period_End date)

declare @Pribor table (id bigint, id_Truba bigint,  Period_Begin date, Period_End date)


insert into @truba values (1, 1, '20140201', '20140228'), (2, 1, '20140203', '20140228')

insert into @pribor values (1, 1, '20140201', '20140205'), (2, 1, '20140210', '20140228'), (3, 2, '20140203', '20140215'), (2, 2, '20140220', '20140228')

select * from @truba

select * from @pribor



Необходимо получить:
id_UslugaPeriod_BeginPeriod_End Мой коммент к данным
12014-02-012014-02-05 т.к. с 01.02.2014 действовала первая труба и на ней действовал прибор по 5-е число в то же время с 3-его действовало две трубы и на обоих одновременно действовали приборы по 5-е. После 5-го первый прибор не работал
12014-02-102014-02-15 т.к. после 15-го перестал работать прибор на второй трубе при этом сама труба действовала
12014-02-202014-02-28 т.к. с 20-го действовали приборы на всех трубах



Смысл выборки в следующем:
Необходимо определить периоды, в которых расчет можно вести по приборам, а в какие периоды необходимо вести расчет по нормативам.


Соответственно так же интересуют периоды, как нормативные (при условии проведении расчета с 01.02.2014 по 28.02.2014)
id_UslugaPeriod_BeginPeriod_End
12014-02-062014-02-09
12014-02-162014-02-19
27 фев 14, 18:13    [15642097]     Ответить | Цитировать Сообщить модератору
 Re: Найти пересечения периодов с наложением  [new]
Galyamov Rinat
Member

Откуда:
Сообщений: 658
Фраза "Необходимо найти все периоды, когда не было действующих труб (ни одной) или хотя бы на одной трубе (из всех действующих труб в этот период) не было действующего прибора."

Относится ко второму набору данных: нормативные периоды.
27 фев 14, 18:16    [15642134]     Ответить | Цитировать Сообщить модератору
 Re: Найти пересечения периодов с наложением  [new]
aleks2
Guest
Осподе, откуда берутся эти горе-программисты?!

Ну сообрази ты, что начало дырки есть конец интервала непрерывности.
Конец дырки - есть начало интервала непрерывности.
Начал и концов одинаковое количество и они идут по-порядку.

Все.
27 фев 14, 18:41    [15642261]     Ответить | Цитировать Сообщить модератору
 Re: Найти пересечения периодов с наложением  [new]
Galyamov Rinat
Member

Откуда:
Сообщений: 658
От туда от куда и все остальные люди.

Вопрос не в том, чтобы найти все периоды действия прибора(ов) на одной трубе, а в том чтобы еще определить, что в данном периоде на всех остальных ДЕЙСТВУЮЩИХ трубах для данного id_Usluga так же действовал(и) приборы.

Ну и можно две результирующие таблицы (по прибору / по норме) объединить в одну с добавлением доп. колонки:
[CSV]id_Usluga,Period_Begin,Period_End, Type_Raschet[CSV]
28 фев 14, 08:13    [15644012]     Ответить | Цитировать Сообщить модератору
 Re: Найти пересечения периодов с наложением  [new]
Galyamov Rinat
Member

Откуда:
Сообщений: 658
id_UslugaPeriod_BeginPeriod_End Type_Raschet
............
28 фев 14, 08:14    [15644017]     Ответить | Цитировать Сообщить модератору
 Re: Найти пересечения периодов с наложением  [new]
aleks2
Guest
Galyamov Rinat
От туда от куда и все остальные люди.

Вопрос не в том, чтобы найти все периоды действия прибора(ов) на одной трубе, а в том чтобы еще определить, что в данном периоде на всех остальных ДЕЙСТВУЮЩИХ трубах для данного id_Usluga так же действовал(и) приборы.

Ну и можно две результирующие таблицы (по прибору / по норме) объединить в одну с добавлением доп. колонки:
[CSV]id_Usluga,Period_Begin,Period_End, Type_Raschet[CSV]


Я, канешно, понимаю что докапываюсь до...
Но какая разница?
Или ты хочешь, чтобы сделали за тебя?

1. Приборы из диапазонов "работы" перевести в диапазоны "неработы".
2. Найти пересечение "работы трубы" и "неработы прибора"
3. Все просто, Зин.
28 фев 14, 09:19    [15644145]     Ответить | Цитировать Сообщить модератору
 Re: Найти пересечения периодов с наложением  [new]
SERG1257
Member

Откуда:
Сообщений: 2877
Засовывай в одну таблицу все даты начала и конца, сортируй по дате и в итоге получишь список всех периодов для которых и решаешь что там было: трубы, нормативы, то и другое или вообще ничего.
28 фев 14, 17:57    [15648351]     Ответить | Цитировать Сообщить модератору
 Re: Найти пересечения периодов с наложением  [new]
SERG1257
Member

Откуда:
Сообщений: 2877
http://www.osp.ru/win2000/2013/11/13038895/
28 фев 14, 19:22    [15648947]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить