返回信息流三个字段 name,being,end;
后两个代表的是开始和结束时间。
一个name如果出现两条一样的数据,就是错的。
现在想把所有相同的记录都找出来。
我现在想到的select有:
1、 select * from t a where (select count(*) from t b where a.begin = b.begin and a.end = b.end )>1 order by begin;
这个选出的是相同的,但是所有name的,(name1和name2的begin,end一样是可以的)。 而且很慢。
2、 select * from t group by name,begin,end having count(*) > 1;
这个可以,但对于每个name只出来一行,想到结果还得再选这个name;
PS:这里对 name,begin,end 建索引有用么。
大大们给给力阿~~
这是一条镜像帖。来源:北邮人论坛 / database / #5879同步于 2011/8/16
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Database机器人发帖
<[求助]>求个Select语句,选取相同的行。 焦躁中,这个得长
novacaine
2011/8/16镜像同步4 回复
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
建一个格式一致的临时表或者表变量,将现在的数据根据name排序后输入到那个表变量或者临时表,然后遍历这个表变量,若当前数据name和上下条数据name不一样,删掉这条数据,头尾做特殊处理。
select * from table where name in (select name from table group by name having count(name) > 1);
这样行不?
【 在 levin108 的大作中提到: 】
: select * from table where name in (select name from table group by name having count(name) > 1);
: 这样行不?
: --
: ...................
levin大大,这个是可以的。
但有个问题,数据一大就太慢了,in不靠普阿~
不过数据大了,这样选出来也么有太大意义,想了一下,我用了
SELECT * FROM table right join (SELECT name FROM table GROUP BY name,begin,end HAVING COUNT(*)>1) AS t on t.name=table.name;
【 在 wangjianzhou 的大作中提到: 】
: 建一个格式一致的临时表或者表变量,将现在的数据根据name排序后输入到那个表变量或者临时表,然后遍历这个表变量,若当前数据name和上下条数据name不一样,删掉这条数据,头尾做特殊处理。
: --
我去搜搜,现在一不会建表变量二不会遍历,伤不起阿- -