表结构如下:Colldate value
2006-1-1 111
2006-1-2 222
2006-1-3 333
2006-1-4 444
2006-1-10 555
2006-1-20 666如果有100条记录,每条的时间相差都是一天,而有2条数据,他们时间相差10天,我认为这10天的是错误数据,我就取当前正确时间间隔为1天。同理,如果有200条数据,每2条之间相隔是10天,而有50条数据,每2条相隔1天,因为200>50,就取大多数的时间间隔作为标准间隔,就是将10天取出来。请问这样的sql语句应该怎么写?
2006-1-1 111
2006-1-2 222
2006-1-3 333
2006-1-4 444
2006-1-10 555
2006-1-20 666如果有100条记录,每条的时间相差都是一天,而有2条数据,他们时间相差10天,我认为这10天的是错误数据,我就取当前正确时间间隔为1天。同理,如果有200条数据,每2条之间相隔是10天,而有50条数据,每2条相隔1天,因为200>50,就取大多数的时间间隔作为标准间隔,就是将10天取出来。请问这样的sql语句应该怎么写?
declare @colldate datetime
declare @val intdeclare @colldate_tmp datetime
declare @val_tmp intdeclare xx_cursor CURSOR
FOR select * from tablename order by colldate
OPEN xx_cursorFETCH NEXT FROM xx_cursor
INTO @colldate_tmp, @val_tmp
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM xx_cursor
INTO @colldate, @val
// TODO...
//
// 计算@colldate 与@colldate_tmp的diff值,可以放到一个临时表中
// 表结构为diff日期间隔和int 计数两个字段。
// 存在计数加1,不存在插入间隔值。
// 遍历完成后取计数最大值即可。
set @colldate_tmp = @colldate
set @val_tmp = @val
-- Get the next vendor.
FETCH NEXT FROM xx_cursor
INTO @colldate, @val
END
1.想要使用一条SQL完成这个语句怕是不可能的...
2.楼上的说的用游标的方法可以实现,但是写的不正确
(
Colldate varchar(10),
value int
)insert into table2 select '2006-01-01', 111
insert into table2 select '2006-01-02', 222
insert into table2 select '2006-01-03', 333
insert into table2 select '2006-01-04', 444
insert into table2 select '2006-01-10', 555
insert into table2 select '2006-01-20', 666--查询语句
select top 1 xday,count(1) as daycount
from
(select t1.*,xday = isnull(datediff(day,(select max(Colldate) from table2 where Colldate < t1.Colldate),Colldate),0)
from table2 t1
)t3
where xday <> 0
group by xday
order by daycount desc--注意:
1.这样的语句只是查出最多的一条,如果101条日期中,前面50个间隔是1天,后面的50个间隔是2天,也就是说你需要的那个数据如果有重复的话,只能取出一条,因为有个top 1
2.如果你的Colldate 是字符格式的话最好把上面的语句用刀的Colldate 都改成convert(datetime,Colldate ,120)
---------------------------
xday daycount
1 3
---------------------------以上查询语句如果去掉top 1 ,查询结果
-----------------------------------
1 3
6 1
10 1
-----------------------------------看到以上结果楼主应该知道这个语句的思路了吧
我写的语句要求楼主的数据Colldate的日期是递增的
如果不是的话,这个语句就不行