Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Выбор и группировка дат  [new]
Igor Kv.
Member

Откуда:
Сообщений: 25
Всем доброго дня прошу помощи, ибо сам уже голову сломал.

есть таблица с двупя полями dop datetime, der datetime

структура записи в них
дата начала занятости, дата окончания

-----------------------------------------------
dop | der
-----------------------------------------------
2013-07-12 09:50:00 | 2013-07-12 10:36:00
-----------------------------------------------
2013-07-12 14:22:00 | 2013-07-12 15:26:00
-----------------------------------------------

и так далее.
есть таблица времени с шагом в 5 минут на день

---------------------
Dates
---------------------
08:00
08:05
08:10
и так далее до 23:00

как выбрать даты так чтобы получить свободное, не использованное время?
а именно хотелось бы так :

08:00 | 09:50:00
10:36 | 14:22
15:26 | 23:00



голову сломал всю.
12 июл 13, 10:51    [14556158]     Ответить | Цитировать Сообщить модератору
 Re: Выбор и группировка дат  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Проще всего рекурсивным CTE , только надо добавить в основную таблицу записи о начале дня и конце ,т.е с 8.00 до "первой записи" и конец занятости до 23.00 (Иили сделайте такое вью ) и по нему постройте СTE .Если я правильно понял что вам надо
12 июл 13, 11:27    [14556486]     Ответить | Цитировать Сообщить модератору
 Re: Выбор и группировка дат  [new]
Igor Kv.
Member

Откуда:
Сообщений: 25
Рекурсия меня не устраивает, задача будет работать в тригере и это сильно замедлит дело.
О Каком именно view вы говорите?
12 июл 13, 11:30    [14556512]     Ответить | Цитировать Сообщить модератору
 Re: Выбор и группировка дат  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Igor Kv.
Рекурсия меня не устраивает, задача будет работать в тригере и это сильно замедлит дело.
О Каком именно view вы говорите?

вот ето в триггере ? Ето перебор
Да и если строить дерево без рекурсии - бо боюсь для 1 го дня будет еще хуже чем в рекурсией
Вью - в котором будет добавленя запись для ващего случая
dop | der
-----------------------------------------------
2013-07-12 08:00:00 | 2013-07-12 09:50:00
------------------------------------------------------
2013-07-12 09:50:00 | 2013-07-12 10:36:00
12 июл 13, 11:33    [14556541]     Ответить | Цитировать Сообщить модератору
 Re: Выбор и группировка дат  [new]
Igor Kv.
Member

Откуда:
Сообщений: 25
мне нужно вывести только не использованное время.
я делал по разному, но в MSSQL группировка работает через одно место блин, на MySql уже бы сделал давно...
12 июл 13, 11:39    [14556603]     Ответить | Цитировать Сообщить модератору
 Re: Выбор и группировка дат  [new]
йфячыц123
Guest
Igor Kv.
мне нужно вывести только не использованное время.
я делал по разному, но в MSSQL группировка работает через одно место блин, на MySql уже бы сделал давно...

и как это выглядит в MySql ?
12 июл 13, 11:41    [14556626]     Ответить | Цитировать Сообщить модератору
 Re: Выбор и группировка дат  [new]
Igor Kv.
Member

Откуда:
Сообщений: 25
в Мускуле вложеные селекты можно ордеровать в нужном направлении.
Группировка проходит только по нужному полю.
12 июл 13, 11:44    [14556665]     Ответить | Цитировать Сообщить модератору
 Re: Выбор и группировка дат  [new]
Igor Kv.
Member

Откуда:
Сообщений: 25
Ладно, мы на MSSQL сейчас, и нужно придумать как хоть с 10ком вложенных селектов, но сделать нужный мне запрос. Помогайте люди.
12 июл 13, 11:46    [14556683]     Ответить | Цитировать Сообщить модератору
 Re: Выбор и группировка дат  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Igor Kv.,

незнание продуктьа не говорит о том что он плох
А если димпазон дат - то вбиватет в посик и через 2 минуті г8отовіх 5 решений прямо здесь
НО еще раз - таккая логика в триггере - зло
12 июл 13, 11:48    [14556714]     Ответить | Цитировать Сообщить модератору
 Re: Выбор и группировка дат  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Резалт
12 июл 13, 11:49    [14556726]     Ответить | Цитировать Сообщить модератору
 Re: Выбор и группировка дат  [new]
Igor Kv.
Member

Откуда:
Сообщений: 25
спасибо конечно, но там везде делают то, что я сам могу сделать. а вот получить то что нужно мне тут, не получается...
12 июл 13, 11:53    [14556783]     Ответить | Цитировать Сообщить модератору
 Re: Выбор и группировка дат  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Igor Kv.
спасибо конечно, но там везде делают то, что я сам могу сделать. а вот получить то что нужно мне тут, не получается...
А что Вам нужно?

Я вот ума не приложу, как Maxx Вас понимает.
К примеру, при чём тут "таблица времени с шагом 5 минут"?
12 июл 13, 12:01    [14556853]     Ответить | Цитировать Сообщить модератору
 Re: Выбор и группировка дат  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Igor Kv.
в Мускуле вложеные селекты можно ордеровать в нужном направлении.
Группировка проходит только по нужному полю.

Покажите пример, в вашем кратком изложении это выглядит очень загадочно, непонятно, о чём вообще речь.
12 июл 13, 12:04    [14556869]     Ответить | Цитировать Сообщить модератору
 Re: Выбор и группировка дат  [new]
Igor Kv.
Member

Откуда:
Сообщений: 25
треш какой-то господа.

я похоже внятно объяснил что есть 2 таблицы из первой нужно получить диапазоны дат в которых нет дат из второй. все нарисовал, показал что хочу в результате, чего тут не понятного?
12 июл 13, 12:06    [14556891]     Ответить | Цитировать Сообщить модератору
 Re: Выбор и группировка дат  [new]
Igor Kv.
Member

Откуда:
Сообщений: 25
iap
Igor Kv.
спасибо конечно, но там везде делают то, что я сам могу сделать. а вот получить то что нужно мне тут, не получается...
А что Вам нужно?

Я вот ума не приложу, как Maxx Вас понимает.
К примеру, при чём тут "таблица времени с шагом 5 минут"?


А что в этой фразе "таблица времени с шагом 5 минут" не понятно?
это таблица где списком идет время от 8 утра до 23 часов с шагом в 5 мину! или слово ШАГ вам не понятно?
12 июл 13, 12:07    [14556900]     Ответить | Цитировать Сообщить модератору
 Re: Выбор и группировка дат  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
на коленке ,все равно непонятно нахрена таблица в 5 минутами
Но попытался изобразить так как вам хоцца и в вашем разрезе таблиц
declare @t table (dop datetime, der datetime)
insert into @t (dop, der) values ('2013-07-12 09:50:00' , '2013-07-12 10:36:00'),('2013-07-12 14:22:00' ,'2013-07-12 15:26:00')
declare @t1 table (wk time)
insert into @t1 (wk) values ('8:00:00')
declare @stDAte time = (select top 1 wk from @t1 order by wk)
;with cte as (
  select t.dop, t.der , n  = ROW_NUMBER() over(partition by 1 order by t.dop)
     
  from (
    select 
	   dop, der
	from @t
	UNION(

    select top 1
	  dop = case when cast(dop as time) = @stDAte then dop else NULL end 
	  ,der  = case when cast(dop as time) = @stDAte then der else  @stDate  end 
    from  @t
	order by dop
  )
  ) t
)
select 
  cast(c1.der as time)  , cast(c2.dop as time)
from  cte c1  
  inner join cte c2 on c1.n+1 =c2.n
12 июл 13, 12:24    [14557074]     Ответить | Цитировать Сообщить модератору
 Re: Выбор и группировка дат  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Igor Kv.
iap
пропущено...
А что Вам нужно?

Я вот ума не приложу, как Maxx Вас понимает.
К примеру, при чём тут "таблица времени с шагом 5 минут"?


А что в этой фразе "таблица времени с шагом 5 минут" не понятно?
это таблица где списком идет время от 8 утра до 23 часов с шагом в 5 мину! или слово ШАГ вам не понятно?
Мне непонятно зачем она тут вообще упоминается.
Нужны только время начала и время конца, судя по примеру?
12 июл 13, 12:31    [14557122]     Ответить | Цитировать Сообщить модератору
 Re: Выбор и группировка дат  [new]
Igor Kv.
Member

Откуда:
Сообщений: 25
Запрос интересный хоть и рекурсия, но нет окончания времени с 14-00 до 23-00 =((
12 июл 13, 12:40    [14557182]     Ответить | Цитировать Сообщить модератору
 Re: Выбор и группировка дат  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Igor Kv.
Запрос интересный хоть и рекурсия, но нет окончания времени с 14-00 до 23-00 =((

1. Там нет рекурсии
2. Ну так добавте (тоже самое тока в обратном направлении)
3. И чтоб уйти от пункта 2- я и предлагал сделать вам вью и по нему все строить
12 июл 13, 12:41    [14557196]     Ответить | Цитировать Сообщить модератору
 Re: Выбор и группировка дат  [new]
petre
Member

Откуда: Кривой Рог
Сообщений: 42
Автор, временные интервалы первой таблицы могут между собой пересекаться?
12 июл 13, 12:41    [14557199]     Ответить | Цитировать Сообщить модератору
 Re: Выбор и группировка дат  [new]
Igor Kv.
Member

Откуда:
Сообщений: 25
за пример спасибо, подскажите как еще туба затолкать окончание, и я поклонюсь вам в ноги!
12 июл 13, 12:42    [14557206]     Ответить | Цитировать Сообщить модератору
 Re: Выбор и группировка дат  [new]
Igor Kv.
Member

Откуда:
Сообщений: 25
petre
Автор, временные интервалы первой таблицы могут между собой пересекаться?

Нет
12 июл 13, 12:43    [14557208]     Ответить | Цитировать Сообщить модератору
 Re: Выбор и группировка дат  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
declare @t table (dop datetime, der datetime)
insert into @t (dop, der) values ('2013-07-12 09:50:00' , '2013-07-12 10:36:00'),('2013-07-12 14:22:00' ,'2013-07-12 15:26:00')
declare @t1 table (wk time)
insert into @t1 (wk) values ('8:00:00'), ('23:00:00')
declare @stDAte time = (select top 1 wk from @t1 order by wk asc)
declare @endDate time = (select top 1 wk from @t1 order by wk desc)
;with cte as (
  select t.dop, t.der , n  = ROW_NUMBER() over(partition by 1 order by CAST(t.dop as time))
     
  from (
    select 
	   dop, der
	from @t
	UNION(

    select top 1
	  dop = case when cast(dop as time) = @stDAte then dop else NULL end 
	  ,der  = case when cast(dop as time) = @stDAte then der else  @stDate  end 
    from  @t
	order by dop
  )
  UNION(
      select top 1
	  dop = case when cast(dop as time) = @endDate then dop else @endDate end 
	  ,der  = case when cast(der as time) = @endDate then der else  @endDate  end 
    from  @t
	order by dop desc
  )
  ) t
)


select 
  cast(c1.der as time)  , cast(c2.dop as time)
from  cte c1  
  inner join cte c2 on c1.n+1 =c2.n
12 июл 13, 12:49    [14557277]     Ответить | Цитировать Сообщить модератору
 Re: Выбор и группировка дат  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
неправильно :)
12 июл 13, 12:50    [14557285]     Ответить | Цитировать Сообщить модератору
 Re: Выбор и группировка дат  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
  UNION(
      select top 1
	  dop = case when cast(der as time) = @endDate then dop else @endDate end 
	  ,der  = case when cast(der as time) = @endDate then der else  @endDate  end 
    from  @t
	order by dop desc
  )

поледний юнион должен выглядеть так
12 июл 13, 12:51    [14557299]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить