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

Откуда:
Сообщений: 133
Доброго времени суток!
запрос
	insert into @dates(date,ID, typedate)
	select d.date, bm.ID , type
	from table1 bm  with(nolock)
		cross apply(
			select bm.DateBegin as date, 1 as type
			union
			select bm.DateClose as date, 2 as type
			union
			select dbo.GetFirstDayOfMonth(dateadd(month, n.n, bm.DateBegin)) as date, 3 as type
				from dbo.GenerateNumbers(1, datediff(month, bm.DateBegin, bm.DateClose), 1) n
			union 
				select  DateDopSogl as date, 4 as type
				from table2 ex where ex.IDChainDog=bm.IDChain
			union 
				select  NewDateEnd as date , 5 as type
				from table2 ex where ex.IDChainDog=bm.IDChain
		) d
	where bm.IDChain = @IDChain

--	select * from @dates
	

	select d2.IDChain, d.typedate
		, case d.typedate when 4 then convert(varchar(10),dateadd(day,1,d1.date),104) 
                                                   else convert(varchar(10),d1.date,104) end as dateFrom
                , convert(varchar(10),d.date,104) as dateTo
dateFrom
	from @dates d
		cross apply(
			select top(1) *
			from @dates d1 where d1.date<d.date
			order by date desc
		) d1
		cross apply(
			select top 1 ex.*
			from table2 ex
			where d.chain = ex.IDChainDog
				and ( d1.date between ex.DateDopSogl and ex.NewDateEnd or d1.date<=ex.PredDateEnd)
		)d2



который возвращает такой селект лист

ID typedate dateFrom DateTo
1 3 2015-01-01 2015-01-31
2 3 2015-02-01 2015-02-28
3 5 2015-03-01 2015-03-19
4 4 2015-03-20 2015-03-20
5 3 2015-03-20 2015-03-31
6 3 2015-04-01 2015-04-30

вопрос
как проставить след дату 2015-03-21, чтобы получилось так...

ID typedate dateFrom DateTo
1 3 2015-01-01 2015-01-31
2 3 2015-02-01 2015-02-28
3 5 2015-03-01 2015-03-19
4 4 2015-03-20 2015-03-20
5 3 2015-03-21 2015-03-31
6 3 2015-04-01 2015-04-30

Сообщение было отредактировано: 27 ноя 15, 15:34
27 ноя 15, 14:32    [18481715]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по дате  [new]
o-o
Guest
когда dateFrom = DateTo,
то в следующей записи при упорядочивании по id,
надо увеличить на день dateFrom?

или только в случае, если dateFrom = DateTo
и следующая запись при упорядочивании по id содержит то же самое dateFrom,
увеличить на день dateFrom?

и какая версия сервера?
27 ноя 15, 14:43    [18481829]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по дате  [new]
maxwait
Member

Откуда:
Сообщений: 133
o-o,

dateFrom (не обязательно равно) DateTo
может быть и различаться
dateFrom dateTo
2015-03-20 2015-03-23
то след запись
dateFrom dateTo
2015-03-24 2015-03-31
27 ноя 15, 14:49    [18481874]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по дате  [new]
maxwait
Member

Откуда:
Сообщений: 133
maxwait,

версия сервера 2014
27 ноя 15, 14:50    [18481883]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по дате  [new]
Glory
Member

Откуда:
Сообщений: 104751
maxwait
как проставить след дату 2015-03-21, чтобы получилось так...

ID typedate dateFrom DateTo
1 3 2015-01-01 2015-01-31
2 3 2015-02-01 2015-02-28
3 5 2015-03-01 2015-03-19
4 4 2015-03-20 2015-03-20
5 3 2015-03-21 2015-03-31
6 3 2015-04-01 2015-04-30

Принцип "чтобы получилось" можно самому придумать ?

CASE WHEN id=5 THEN '2015-03-21' ELSE dateFrom END

Сообщение было отредактировано: 27 ноя 15, 14:51
27 ноя 15, 14:51    [18481895]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по дате  [new]
maxwait
Member

Откуда:
Сообщений: 133
Glory,

а смысл ID это primary key identity(1,1)
надо обновить следующую запись за typedate = 4 в dateTo+1 для dateFrom where id = 5
27 ноя 15, 14:56    [18481950]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по дате  [new]
o-o
Guest
maxwait
o-o,

dateFrom (не обязательно равно) DateTo
может быть и различаться
dateFrom dateTo
2015-03-20 2015-03-23
то след запись
dateFrom dateTo
2015-03-24 2015-03-31

тогда критерий какой?
при сортировке по id
в парах строк, где DateTo первой совпадает с dateFrom второй,
к dateFrom второй добавить день?
27 ноя 15, 15:02    [18481998]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по дате  [new]
Glory
Member

Откуда:
Сообщений: 104751
maxwait
надо обновить следующую запись за typedate = 4 в dateTo+1 для dateFrom where id = 5

Почему именно эту запись ?
27 ноя 15, 15:03    [18482007]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по дате  [new]
maxwait
Member

Откуда:
Сообщений: 133
o-o,

да к dateFrom добавить +1 от dateTo предыдущей строки

надо так...

typedate dateFrom dateTo
3 2015-01-01 2015-01-31
3 2015-02-01 2015-02-28
3 2015-03-01 2015-03-31
5 2015-04-01 2015-04-15
4 2015-04-16 2015-04-20
3 2015-04-21 2015-04-31
3 2015-05-01 2015-05-30
5 2015-06-01 2015-06-09
4 2015-06-11 2015-06-18
3 2015-06-19 2015-06-30
27 ноя 15, 15:14    [18482076]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по дате  [new]
o-o
Guest
declare @t table (ID int, typedate int, dateFrom date, DateTo date);
insert into @t values
(1, 3, '2015-01-01', '2015-01-31'),
(2, 3, '2015-02-01', '2015-02-28'),
(3, 5, '2015-03-01', '2015-03-19'),
(4, 4, '2015-03-20', '2015-03-20'),
(5, 3, '2015-03-20', '2015-03-31'),
(6, 3, '2015-04-01', '2015-04-30');

select ID, typedate, 
       case dateFrom
           when lag(dateTo) over(order by id) then dateadd(day, 1, dateFrom)
           else dateFrom
       end as dateFrom,
       dateTo
from @t

?
27 ноя 15, 15:34    [18482233]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить