首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

求个算法。该怎么处理

2012-12-17 
求个算法。现有一个视图,里面有时间字段a,现在希望判断每一条记录之前的15分钟内是否超过15条记录,如果超过

求个算法。
现有一个视图,里面有时间字段a,现在希望判断每一条记录之前的15分钟内是否超过15条记录,如果超过则给一个标志位。

初步看是遍历每一条记录查询其之前的15分钟的条数,但是不知道高手有没有其他的办法?
[最优解释]

with t(id,dt,flag)
as(
select 1,'2012-11-22 09:38:00',null union all
select 2,'2012-11-22 09:39:00',null union all
select 3,'2012-11-22 09:40:00',null union all
select 4,'2012-11-22 09:41:00',null union all
select 5,'2012-11-22 09:42:00',null union all
select 6,'2012-11-22 09:43:00',null union all
select 7,'2012-11-22 09:44:00',null union all
select 8,'2012-11-22 09:45:00',null union all
select 9,'2012-11-22 09:46:00',null union all
select 10,'2012-11-22 09:47:00',null union all
select 11,'2012-11-22 09:48:00',null union all
select 12,'2012-11-22 09:49:00',null union all
select 13,'2012-11-22 09:50:00',null union all
select 14,'2012-11-22 09:51:00',null union all
select 15,'2012-11-22 09:52:00',null union all
select 16,'2012-11-22 09:53:00',null union all
select 17,'2012-11-22 09:54:00',null union all
select 18,'2012-11-22 09:55:00',null union all
select 19,'2012-11-22 09:57:00',null union all
select 20,'2012-11-22 09:58:00',null
)
--如果你的表有这个id字段
select
id,
dt,
flag=(select count(1) from t where t.dt >=dateadd(mi,-15,a.dt) and t.dt<a.dt)
from
t a
--如果没有
/*
id          dt                  flag
----------- ------------------- -----------
1           2012-11-22 09:38:00 0
2           2012-11-22 09:39:00 1
3           2012-11-22 09:40:00 2
4           2012-11-22 09:41:00 3
5           2012-11-22 09:42:00 4
6           2012-11-22 09:43:00 5
7           2012-11-22 09:44:00 6
8           2012-11-22 09:45:00 7
9           2012-11-22 09:46:00 8
10          2012-11-22 09:47:00 9
11          2012-11-22 09:48:00 10
12          2012-11-22 09:49:00 11
13          2012-11-22 09:50:00 12
14          2012-11-22 09:51:00 13
15          2012-11-22 09:52:00 14
16          2012-11-22 09:53:00 15
17          2012-11-22 09:54:00 15
18          2012-11-22 09:55:00 15
19          2012-11-22 09:57:00 14


20          2012-11-22 09:58:00 14

(20 行受影响)
*/
--这样一目了然  该怎么处理自己就会了吧


[其他解释]
select *,
       flag=(case when (select count(*) from tb where datediff(mi,t.a,a)<15)>15 then '>15' else '<15' end)
from tb t
[其他解释]
不如在视图对应的表中加一个标志字段,程序保存的时候把值写入这个字段,这样就彻底容易了
[其他解释]
木有什么比较省资源的啊
[其他解释]
引用:
木有什么比较省资源的啊


你还想怎么节省  把你的思路说出来大家看看
[其他解释]
引用:
引用:木有什么比较省资源的啊

你还想怎么节省  把你的思路说出来大家看看



就是木有思路啊,因为这样的话相当于不停的遍历了前面的数据,关键我这view的查询速度已经很慢了,试了下 加上这个 4分钟才出来200条 
[其他解释]
引用:
引用:引用:木有什么比较省资源的啊

你还想怎么节省  把你的思路说出来大家看看


就是木有思路啊,因为这样的话相当于不停的遍历了前面的数据,关键我这view的查询速度已经很慢了,试了下 加上这个 4分钟才出来200条


你这个好像还真的得全部扫描呢
[其他解释]
你去视图上而不是实体表上找?没索引肯定不快咯
[其他解释]
引用:
你去视图上而不是实体表上找?没索引肯定不快咯


不能用基础表啊,基础表的数据不符合要求。
[其他解释]
没有任何索引的东西只能用全表扫描,哪怕你只查询一条数据。

热点排行
Bad Request.