CREATE procedure sp_ActivityFrequencyOneUserGraph
(
@date1 nvarchar(100) ,
@date2 nvarchar(100),
@customerID int,
@user int,
@type nvarchar(50)
)
as
select Count(Page) as VisitingCount,[Time]
from
( SELECT Page,Date,[user],
<strong>dbo.fn_GetActivityLogArranger2(Date,@type) as [Time]</strong>
FROM scr_SecuristLog
) scr_SecuristLog
where
Date between @date1 and @date2
and
[user] in
( select USERNAME
from scr_CustomerAuthorities
where customerID=Convert(varchar,@customerID)
and ID=Convert(varchar,@user)
)
group by [Time] order by [Time] asc
return
Моя функция:
CREATE FUNCTION [dbo].[fn_GetActivityLogArranger2]
(
@t AS datetime,
@type AS nvarchar(50)
)
RETURNS nvarchar(max)
AS
BEGIN
declare @Return nvarchar(max)
set @t = cast (@t as smalldatetime)
if(@type='hour')
begin
set @t= dateadd(minute, -(datepart(minute, @t)), @t)
end
else if(@type='halfhour')
begin
set @t=
case
when datepart(minute, @t) >= 30
then dateadd(minute, 60-(datepart(minute, @t)), @t)
else dateadd(minute, 30-(datepart(minute, @t)), @t)
end
end
else if(@type='tenminutes')
begin
set @t= case
when datepart(minute,@t)%10 >=5
then dateadd(minute,10-(datepart(minute,@t)%10),@t)
else dateadd(minute,-(datepart(minute,@t)%10),@t)
end
end
select @Return=CONVERT(VARCHAR(5),@t, 108)
Return @Return
end
если я использую dbo.fn_GetActivityLogArranger2 ('2009-04-30', 'hour') Моя таблица результатов
Table2
VisitingCount ---------- Время --------------
23 --------------------- 10:30 -------------
33 --------------------- 11:00 ----------------
43 --------------------- 11:30 ----------------
53 --------------------- 12:00 ----------------
Но; 12: 30-13: 30: перерыв на обед. Итак, никто не захочет войти в систему. Итак, результат моей таблицы:
Table2
VisitingCount ---------- Время -----------
23 --------------------- 10:30 ----------
33 --------------------- 11:00 ----------
43 --------------------- 11:30 ----------
53 --------------------- 12:00 ----------
0 ---------------------- 12:30 ----------
0 ---------------------- 13:00 ----------
0 ---------------------- 13:30 ----------
23 --------------------- 14:00 ----------
33 --------------------- 14:30 ----------
37 --------------------- 15:00 ----------
Но между этими часами ('12: 30-13: 00-13: 30') в системе не было записей. Как преобразовать Table1 в Table2? Я думаю, что мне нужна функция, чтобы генерировать все промежутки времени каждую минуту, и позже я могу использовать метод Union. Но как?
Но мне нужен динамический метод, а не текстовое значение "когда время между '12: 30' и '13: 30' ...." Мне нужен Genarator: '12: 30 ... 22:30 ... 24: 30 '--- <0,0,0,0 ..... и союз (это мое предположение) </p>