Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вопрос по запросу / 3 сообщений из 3, страница 1 из 1
25.12.2017, 15:31
    #39575548
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по запросу
Здравствуйте!
Есть список уникальных ТТ+SKU и для каждого свои периодыТТSKUStartDateEndDateТТ1SKU1 01.10.201710.10.2017ТТ1SKU2 01.10.201710.10.2017ТТ2SKU1 08.10.201716.10.2017ТТ2SKU2 08.10.201716.10.2017............

Для каждого ТТ+SKU имеет свое количество сценарий, в зависимости от длины периода. То есть в одном сценарии должно быть 7 дней. К примеру

Для ТТ1+SKU1, где StartDate = 01.10.2017 и EndDate=10.10.2017 должно быть 4 периода по 7 дней подряд:
1. 01.10.2017 - 07.10.2017
2. 02.10.2017 - 08.10.2017
3. 03.10.2017 - 09.10.2017
4. 04.10.2017 - 10.10.2017

А для ТТ2+SKU1, где StartDate = 08.10.2017 и EndDate=12.10.2017 должно быть 3 периода по 7 дней подряд:
1. 08.10.2017 - 14.10.2017
2. 09.10.2017 - 15.10.2017
3. 10.10.2017 - 16.10.2017

Нужен такой результатСценарийTTSKUStartDateВСценарииEndDateВСценарииДатаСценарий1ТТ1SKU101.10.201707.10.201701.10.2017Сценарий1ТТ1SKU101.10.201707.10.201702.10.2017Сценарий1ТТ1SKU101.10.201707.10.201703.10.2017Сценарий1ТТ1SKU101.10.201707.10.201704.10.2017Сценарий1ТТ1SKU101.10.201707.10.201705.10.2017Сценарий1ТТ1SKU101.10.201707.10.201706.10.2017Сценарий1ТТ1SKU101.10.201707.10.201707.10.2017Сценарий2ТТ1SKU102.10.201708.10.201702.10.2017Сценарий2ТТ1SKU102.10.201708.10.201703.10.2017Сценарий2ТТ1SKU102.10.201708.10.201704.10.2017Сценарий2ТТ1SKU102.10.201708.10.201705.10.2017Сценарий2ТТ1SKU102.10.201708.10.201706.10.2017Сценарий2ТТ1SKU102.10.201708.10.201707.10.2017Сценарий2ТТ1SKU102.10.201708.10.201708.10.2017..................

Пытаюсь написать SQL-запрос для данной задачи
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
DECLARE @TT_SKU Table
( CodeTT varchar (8), SKU int, DateStart date, DateEnd date) 

INSERT INTO @TT_SKU SELECT 'ТТ1', 00001,'01.10.2017', '10.10.2017'
INSERT INTO @TT_SKU SELECT 'ТТ1', 00002,'01.10.2017', '10.10.2017'
INSERT INTO @TT_SKU SELECT 'ТТ2', 00001,'08.10.2017', '16.10.2017'
INSERT INTO @TT_SKU SELECT 'ТТ2', 00002,'08.10.2017', '16.10.2017'

SELECT
	CodeTT,
	SKU,
	DateStart,
	DateEnd,
	DateDiff(day,DateStart,dateEnd)+1 AS КоличествоДнейВПериоде	
FROM
	@TT_SKU 

Запутался. Тут похоже цикл нужен. Скажите для решения данной задачи какую функцию надо использовать? Как правильно написать запрос?
...
Рейтинг: 0 / 0
25.12.2017, 16:48
    #39575606
Дедушка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по запросу
общая идея (@td - может быть заранее заполнена):
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
set dateformat dmy

declare @td table (d date)
declare @d datetime = '2017-01-01'

while @d <= '2018-01-10'
begin
insert @td (d) select @d
set @d = dateadd(dd,1,@d)
end

-------------------------------------------------------------------------

declare @tt_sku table
( codett varchar (8), sku int, datestart date, dateend date) 

insert into @tt_sku select 'tt1', 00001,'01.10.2017', '10.10.2017'
insert into @tt_sku select 'tt1', 00002,'01.10.2017', '10.10.2017'
insert into @tt_sku select 'tt2', 00001,'08.10.2017', '16.10.2017'
insert into @tt_sku select 'tt2', 00002,'08.10.2017', '16.10.2017'

select
*
from
@tt_sku t
outer apply
(select d as istart, dateadd(dd,6,td.d) as iend from @td td where td.d >= datestart and dateadd(dd,6,td.d) <= dateend) f
...
Рейтинг: 0 / 0
25.12.2017, 16:58
    #39575616
мегамозг
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по запросу
ferzmikk ... Запутался. Тут похоже цикл нужен. Скажите для решения данной задачи какую функцию надо использовать? Как правильно написать запрос?
Если даты начала и конца в пределах 2 недель, то сделать еще одну табличку x с числами от 1 до 7 и сджойнить ее с таблицей, а потом это сджойнить с таблицей по условию t0.DateStart + x.num +7 меньше t1.DateEnd. Естественно для конкретной пары значений ТТ+SKU.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вопрос по запросу / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]