时间比较问题
数据库设计
id 开始时间 结束时间 证件号码
要求,同一个证件号码,在开始时间和结束时间中,有叠加的不超过3次
如:
1 2007-02-10 2007-07-10
2 2007-04-10 2007-08-10
3 2007-06-10 2007-12-10
这三个时间段中,
1 / 2 /3
6/7月份是3个都有的,那么,这就是非法的
------解决方案--------------------前不久刚写过一个类似的
select * from your_table
where crd_no in (
select crd_no from (
SELECT aa.crd_no as crd_no, count(aa.crd_no) as dup_count
FROM your_table aa, your_table bb
WHERE aa.crd_no = bb.crd_no
AND aa.id <> bb.id
AND ( (aa.start_date between bb.start_date and bb.end_date)
OR (bb.start_date between aa.start_date and aa.end_date)
)
group by aa.crd_no having count(aa.crd_no) < 3
)
)
大文字的是我写的用来check重复纪录的,小文字是根据LZ要求加的,没测试过,LZ自己测一下吧
------解决方案--------------------补充:我的表是日期类型的,LZ的如果是文字类型可以通过to_date转换一下,但如果文字长度一样,文字类型也是可以直接比较的