首页 新闻 搜索 专区 学院

sql一张表取ID重复的数据出来,没有主键和自增。取重复的时候两个值之间的时间间隔不能超过600秒。求指导。

0
悬赏园豆:20 [已解决问题] 解决于 2013-08-13 13:09

取重复的时候两个值之间的时间间隔不能超过600秒。求指导。

假设这个表:

ID Time
1 2013-06-24 14:08:42.000
1 2013-06-25 15:09:45.000
1 2013-06-24 14:10:43.000
2 2013-07-09 10:56:25.000
2 2013-07-09 10:58:25.000
1 2013-06-26 14:10:43.000
1 2013-06-26 14:12:43.000
4 2013-07-31 09:07:26.000
5 2013-07-31 09:07:26.000

我要取出来的就是第一条和第三条两个id为1的数据以及两个id为2还有第六条和第七条id为1的。

大概就是这样。sql比较薄弱一点,不知道怎么比较Time的大小。按照网上搜的select ID]from table group by ID
 having count(ID)>1只能搜到所有id重复了的,没有考虑时间。

可不可以取第一条时间然后和id相同的行比较时间 那不要比较很多次的。不知道怎么写额。

camille繁花的主页 camille繁花 | 初学一级 | 园豆:16
提问于:2013-08-13 09:26
< >
分享
最佳答案
0
--复制基础数据
ID    Time
1    2013-06-24 14:08:42.000
1    2013-06-24 15:09:45.000
1    2013-06-24 14:08:43.000
2    2013-07-09 10:56:25.000
2    2013-07-09 10:58:25.000
3    2013-07-31 09:06:48.000
4    2013-07-31 09:07:26.000
--创建临时表,模拟表结构
CREATE TABLE #t_test(id INT ,t DATETIME)
--插入数据(省略)
--对比数据与模拟数据是否正确
SELECT * FROM #t_test
--出结果
SELECT * FROM #t_test t1
JOIN #t_test t2 ON t1.id=t2.id AND DATEDIFF(second,t2.t,t1.t) BETWEEN -600 AND 600 AND t1.t<>t2.t
收获园豆:20
幻天芒 | 高人七级 |园豆:36662 | 2013-08-13 10:05

这样行么?既然是#t_test t1 JOIN #t_test t2为什么要建临时表啊,可以在原表上直接查询啊。有很多条数据的,可能不同日期的相同id 的重复。就要把时间差在600之内的全部取出来。

camille繁花 | 园豆:16 (初学一级) | 2013-08-13 10:19

@camille繁花: 大哥,我是测试....你替换为你的表就可以了~

幻天芒 | 园豆:36662 (高人七级) | 2013-08-13 10:48

@幻天芒: 额。我知道。我试了,全部可以显示出来一一对应。但是一条记录都有两个数据就是两个表的数据都在一条了 我是用视图写的,查询全部的时候结果是对的,但是视图不允许,查询t1的数据就不对了 怎么绑定到repeater?

camille繁花 | 园豆:16 (初学一级) | 2013-08-13 10:56

@camille繁花: 把*号,换成具体的字段即可...。或者你在前台直接绑定你需要的字段~

幻天芒 | 园豆:36662 (高人七级) | 2013-08-13 11:00
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册