gpt4 book ai didi

sql - 如何在记录的时间间隔中添加非记录的时间间隔?如何创建 tihs 方法?

转载 作者:行者123 更新时间:2023-12-04 10:39:17 27 4
gpt4 key购买 nike

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],
dbo.fn_GetActivityLogArranger2(Date,@type) as [Time]
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') 我的结果表


表2

访问计数------------时间--------------
23------------10:30------------
33---------------------11:00----------------
43---------------------11:30----------------
53---------------------12:00----------------

但; 12:30-13:30:午休。所以,没有人会想进入系统。所以我的表结果:

表2

访问计数-----------时间-----------
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'....” 我需要发电机:'12:30...22:30...24:30'- --<0,0,0,0..... 和联盟(这是我的猜测)

最佳答案

创建一个所有时间表(您可以使用数字表并使用 dateadd(mm, value*30) 但时间可能更容易)您需要在报告中覆盖并加入查询中的时间以用作时间值(value);这会让你填补你的空白。

创建一个时间表(在下面的示例中为 tblTimes)并将您需要报告的时间范围内的所有值插入到表中。然后更改您的 sql,以便您从该表中进行选择并加入您的 scr_SecuristLog 表。这样做你只会得到两个表之间映射的值;因此,如果您的 scr_SecuristLog 表出于某种原因计算出 10.36 而那不在您的 tblTimes 表中,那么您将看不到该记录。

select Count(Page) as VisitingCount,[Time]      
from
tblTimes Alltimes
left outer join
( SELECT Page,Date,[user],
dbo.fn_GetActivityLogArranger2(Date,@type) as [Time]
FROM scr_SecuristLog
) scr_SecuristLog
on Alltimes.Time = scr_SecuristLog.[Time]
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

关于sql - 如何在记录的时间间隔中添加非记录的时间间隔?如何创建 tihs 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/835251/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com