И
Истребитель
Добрый день.
1) Ума не приложу как создать вот такой запрос:
Исходные данные: таблица вида
ID, DateFrom, DateTo
Например
1, 01.01.2010 17:00, 03.01.2010 12:00
2, 04.01.2010 12:00, 05.01.2010 14:00
3, 06.01.2010 11:00, 06.01.2010 12:00
Конечные данные: та же таблица но разнесенная по дням
ID, Date, TimeFrom, TimeTo
1, 01.01.2010, 17:00, 23:59
1, 02.01.2010, 00:00, 23:59
1, 03.01.2010, 00:00, 12:00
2, 04.01.2010, 12:00, 23:59
2, 05.01.2010, 00:00, 12:00
3, 06.01.2010, 11:00, 12:00
2) Сделал это через "попу", но хотел бы знать, если ли нормальные идеи, как создать такой запрос:
Исходные данные запроса: DateFrom, DateTo, таблица вида
ID, Date, (data)
Например
с 01.01.2010 по 05.01.2010
1, 01.01.2010, data1
2, 03.01.2010, data2
3, 03.01.2010, data3
4, 04.01.2010, data4
Конечные данные:
Date, (data)
01.01.2010, data1
02.01.2010, null
03.01.2010, data3
03.01.2010, data4
04.01.2010, data4
05.01.2010, null
Я сделал это, создав функцию с рекурсивным запросом, который выдает для интервала набор дат
После чего лефт джойном исходной таблицы... Но это крайне криво, плюс это не работает, если задать большой интервал (предел вроде 90 или 100 итераций, после чего рекурсивный запрос выдает ошибку)
Подскажите плиз, опытные гуру!
1) Ума не приложу как создать вот такой запрос:
Исходные данные: таблица вида
ID, DateFrom, DateTo
Например
1, 01.01.2010 17:00, 03.01.2010 12:00
2, 04.01.2010 12:00, 05.01.2010 14:00
3, 06.01.2010 11:00, 06.01.2010 12:00
Конечные данные: та же таблица но разнесенная по дням
ID, Date, TimeFrom, TimeTo
1, 01.01.2010, 17:00, 23:59
1, 02.01.2010, 00:00, 23:59
1, 03.01.2010, 00:00, 12:00
2, 04.01.2010, 12:00, 23:59
2, 05.01.2010, 00:00, 12:00
3, 06.01.2010, 11:00, 12:00
2) Сделал это через "попу", но хотел бы знать, если ли нормальные идеи, как создать такой запрос:
Исходные данные запроса: DateFrom, DateTo, таблица вида
ID, Date, (data)
Например
с 01.01.2010 по 05.01.2010
1, 01.01.2010, data1
2, 03.01.2010, data2
3, 03.01.2010, data3
4, 04.01.2010, data4
Конечные данные:
Date, (data)
01.01.2010, data1
02.01.2010, null
03.01.2010, data3
03.01.2010, data4
04.01.2010, data4
05.01.2010, null
Я сделал это, создав функцию с рекурсивным запросом, который выдает для интервала набор дат
Код:
ALTER FUNCTION [Fact].[DateRange]
(
@StartDate Date
,@EndDate Date
)
RETURNS TABLE
AS
RETURN
(
WITH DateRange (Date)
AS
(
-- Anchor member definition
SELECT Convert(Date,@StartDate) as Date
UNION ALL
-- Recursive member definition
SELECT Convert(Date,DATEADD(day,1,d.Date)) as Date
from DateRange d
where Date<@EndDate
)
-- Statement that executes the CTE
SELECT Date as Date FROM DateRange
)
Подскажите плиз, опытные гуру!