求一个查询时间段算法,
假设现有数据库有数据
开始时间
AutoID AddTime                            StartTime               EndTime      
1 2010-8-13 14:24:55 2010-8-2 8:00:00 2010-8-5 18:00:00
2 2010-8-13 14:37:12 2010-8-6 9:00:00 2010-8-22 20:00:00
3 2010-8-18 16:33:02 2010-9-2 11:00:00 2010-9-5 22:00:00
4 2010-8-18 16:42:13 2010-9-6 8:00:00 2010-9-15 18:00:00
9 2010-8-21 14:48:30 2010-9-16 15:00:00 2010-9-20 15:00:00求如何得出一个假设是间隙3天 条件是 大于等于现在时间,小于等于 8-30 15:00
就是查询出2010-8-23 20:00:00 --  2010-9-01 20:00:00
这个查询用于工厂计划生产,在茫茫多的订单中找出小于交货时间并且不和某张单生产冲突的需求
上面的例子是,假设有订单要求9-1号交货,今天是23号,货物需要3天生产,请根据以上已有的订单找出货物什么最晚可以在什么时候生产(9-1 我这里会找到8-27-9-1最晚生产为这个时间,因为这个时间不会和现有的单生产冲突也是最晚可用时间)假设以上例子如果8-22 到 9-1没空,就继续网上找,直到找到空隙时间位置,当然空隙时间不可能大于现在,你没可能计划已过去的时间生产未来的货物吧?就像你找到了有单22号结束,但是你不可能返回22号开始9-1结束,你需要返回今天到9-1号,当然如果今天是22你可以直接那这单的结束做开始。当然,中间还有放假的问题,例如8-30放假,那么返回的结果应该是8-26到8-29开始生产。也就是说生产时间段不能和已有计划,假期,现在时间,交货时间有冲突,开始必须大于等于现在,间隙必须足够生产完毕货物,结束时间必须小于等于交货日期。并且不能和其他生产计划有交叉冲突。

解决方案 »

  1.   

    AutoID AddTime StartTime EndTime   
    1 2010-8-13 14:24:55 2010-8-2 8:00:00 2010-8-5 18:00:00 
    2 2010-8-13 14:37:12 2010-8-6 9:00:00 2010-8-22 20:00:00 
    3 2010-8-18 16:33:02 2010-9-2 11:00:00 2010-9-5 22:00:00 
    4 2010-8-18 16:42:13 2010-9-6 8:00:00 2010-9-15 18:00:00 
    9 2010-8-21 14:48:30 2010-9-16 15:00:00 2010-9-20 15:00:00如何用sql找出不和以上数据列表交叉冲突,并且满足一定天数,大于等于现在,小于等于结束时间。
    例如传入EndTime 9-1,5天,今天23号。
    人工你会找到23 - 8-31,程序呢?如何找到?