我的数据库实际上不是客户和订单,它是客户和眼科测试的处方(以防万一有人想知道为什么我希望我的客户不那么频繁地下订单!)
我有一个眼镜商链数据库,处方表有分支ID号,患者ID号和他们测试眼睛的日期.随着时间的推移,患者将在数据库中列出多个眼睛测试.如何获得六个月内在系统上输入一次以上处方的患者名单.换言之,例如,一个处方的日期是在同一患者的先前处方的日期之后的三个月内.
样本数据:
Branch Patient DateOfTest 1 1 2007-08-12 1 1 2008-08-30 1 1 2008-08-31 1 2 2006-04-15 1 2 2007-04-12
我不需要知道结果集中的实际日期,也不需要完全是三个月,只是一个处方太接近以前处方的患者列表.在给出的示例数据中,我希望查询返回:
Branch Patient 1 1
这种查询不会经常运行,所以我不会过分担心效率问题.在我们的实时数据库中,我在处方表中有25万条记录.
像这样的东西
select p1.branch, p1.patient from prescription p1, prescription p2 where p1.patient=p2.patient and p1.dateoftest > p2.dateoftest and datediff('day', p2.dateoftest, p1.dateoftest) < 90;
应该......你可能想补充一下
and p1.dateoftest > getdate()
限制未来的测试处方.