------解决方案-------------------- 如果是13秒的话 ,1出现2次,2和3各一次 对吧?
------解决方案-------------------- 哦,原来是这样,懂了
------解决方案-------------------- 用总时间(总秒数)除以总间隔时间(所有时间间隔之和)得到所有记录一起出现的次数得到最后一条记录出现的次数 总时间(总秒数)除以总间隔时间(所有时间间隔之和)的余数除以除去最后一个记录的时间间隔之和+最后一条记录出现的次数就是倒数第二条记录出现的次数 依次类推就可以得出所有的数据出现的次数
------解决方案-------------------- declare @ADID varchar(20)='123' declare @IT int declare @I int =0 declare @J int =0 declare @G int =1 select @IT=DATEDIFF(s,starttime,endtime) from @TempaTab where ADID=@ADID declare @TB table(ID int identity(1,1),PID int,IntervalTimes int,total int default 0) insert into @TB(PID,IntervalTimes) select PID,IntervalTimes from @TempcTab where ADID=@ADID order by pid select @J=MAX(ID) from @TB while @I<@IT begin
select @I=@I+IntervalTimes from @TB where ID=@G update @TB set total=total+1 where ID=@G set @G=@G+1 if @G>@J set @G=1 end select pid,total from @TB
------解决方案--------------------
写的很繁琐,自己优化
SQL code
DECLARE @TempaTab TABLE
(
[ID] INT IDENTITY(1, 1) PRIMARY KEY,
[ADID] varchar(20), --//编码
[StartTime] varchar(19), --//开始时间
[EndTime] varchar(19) --//结束时间
)
INSERT INTO @TempaTab(ADID,StartTime,EndTime)
VALUES ('123','2003-01-01 03:44:29','2003-01-01 03:44:37')
DECLARE @TempcTab TABLE
(
[ID] INT IDENTITY(1, 1) PRIMARY KEY,
[ADID] varchar(20), --//编码
[PID] INT, --//编号
[IntervalTimes] INT --//间隔时间(单位:秒)
)
INSERT INTO @TempcTab(ADID,PID,IntervalTimes)
VALUES('123',1,4)
INSERT INTO @TempcTab(ADID,PID,IntervalTimes)
VALUES('123',2,4)
INSERT INTO @TempcTab(ADID,PID,IntervalTimes)
VALUES('123',3,4)
select *,
case when (select datediff(ss,StartTime,EndTime) from @TempaTab where ADID=a.ADID)%
(select sum(IntervalTimes) from @TempcTab
where ADID=a.ADID)
> isnull((select sum(IntervalTimes) from @TempcTab
where ADID=a.ADID and PID<a.PID),0)
and
(select datediff(ss,StartTime,EndTime) from @TempaTab where ADID=a.ADID)%
(select sum(IntervalTimes) from @TempcTab
where ADID=a.ADID)
<=(select sum(IntervalTimes) from @TempcTab
where ADID=a.ADID) then
(select datediff(ss,StartTime,EndTime) from @TempaTab where ADID=a.ADID)/
(