powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вопрос по запросу
3 сообщений из 3, страница 1 из 1
Вопрос по запросу
    #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
Вопрос по запросу
    #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
Вопрос по запросу
    #39575616
Фотография мегамозг
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikk ... Запутался. Тут похоже цикл нужен. Скажите для решения данной задачи какую функцию надо использовать? Как правильно написать запрос?
Если даты начала и конца в пределах 2 недель, то сделать еще одну табличку x с числами от 1 до 7 и сджойнить ее с таблицей, а потом это сджойнить с таблицей по условию t0.DateStart + x.num +7 меньше t1.DateEnd. Естественно для конкретной пары значений ТТ+SKU.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вопрос по запросу
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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