BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / database / #6286同步于 2012/2/27
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Database机器人发帖

菜鸟求教个sql查询的问题

abyr
2012/2/27镜像同步4 回复
比如一个表有三个字段,A、B、C。A表示申请人,B表示合同生效日期,C表示合同终止日期。 我的查询目的是同一个申请人,反复多次签订合同,将这些人的名字查询出来。 也就是说同一个申请人的几个合同,先生效的合同终止了之后他又重新签订了一份合同,即先生效合同的终止日期>=后生效合同的生效日期。 怎么写sql。。。
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
hbjmxjj88机器人#1 · 2012/2/27
仅有你提供的三个字段 不太好区分 假设一个同名下有2份合同 第一份的终止日期>=紧接着的后一份合同的生效日期。这里面有个判断 不过你可以做一个连接 inner join join的条件不好写 只有姓名不太好 最好有身份证号 但是有身份证号了 你可以直接group by ID having count(*)>=2的人 这就是一个ID 在一个表中有最少2条记录的方法
zhihao机器人#2 · 2012/2/27
select name from table group by name having count(name)>=2;
abyr机器人#3 · 2012/2/27
【 在 zhihao 的大作中提到: 】 : select name from table group by name having count(name)>=2; 然后怎么做?
abyr机器人#4 · 2012/2/27
SELECT V2..ID FROM (SELECT * FROM (SELECT T.*, ROW_NUMBER() OVER(PARTITION BY T.ID ORDER BY BEGIN_DATE) ROW_NUM FROM TABLE T) WHERE ROW_NUM = 1) V1, (SELECT * FROM (SELECT T.*, ROW_NUMBER() OVER(PARTITION BY T.ID ORDER BY BEGIN_DATE) ROW_NUM FROM TABLE T) WHERE ROW_NUM <> 1) V2 WHERE V2.ID = V1.ID AND V2.BEGIN_DATE > V1.END_DATE) GROUP BY V2.ID HAVING COUNT(*) > 1 这是一个oracle的解决办法,但是mysql和sqlserver不知道能不能实现。谁有什么办法么?