如果时间范围是2012-1-1 2:0:0 至 2012-2-23 7:0:0 (datetime型),那么这期间与 8:0:0 至 11:30:0 (time型) 一共重叠了多少分钟\小时?求MYSQL语句

解决方案 »

  1.   

    重叠什么意思,总和?
    贴建表及插入记录的SQL,及要求结果出来看看
      

  2.   

    比如:  8:0:0 到 11:30:0 (可用DECLARE tBegin ,tEnd TIME表示)表1 
    id  begin               end
    1  2012-2-22 7:0:0    2012-2-23 3:0:0 
    2  2012-2-22 9:0:0    2012-2-23 3:0:0 
    3  2012-2-22 9:0:0    2012-2-24 3:0:0 结果:4个半小时
    结果:3个半小时
    结果:27个半小时
      

  3.   

    我刚建了一个表1:
    U_ID U_Begin         U_End
    1000 08:00:00 15:00:00
    1100 15:01:00 00:00:00如果给一个时间范围如:2012-1-1 9:0:0 至 2012-2-23 2:0:0 为参数,
    求这个时间段与表1 每行记录重叠多少分钟?
      

  4.   

    时间格式都是%Y-%m-%d %H:%i:%s
      

  5.   

    参考下贴http://topic.csdn.net/u/20101014/20/34b244e2-290e-44b4-8084-fe86acdc4e4b.html
     散分,并如何判断时间段上有重叠冲突。 [推荐] [其他数据库开发 MySQL/Postgresql]
      

  6.   

    关于时间重叠,问题起至以下一个算法问题:
    有一个场地管理时间价格表:
    CREATE TABLE `T_ProjectJFSJ` (
      `U_ID` int(11) NOT NULL,
      `U_Project` int(11) DEFAULT NULL,  场地
      `U_Begin` time DEFAULT NULL, 开始
      `U_End` time DEFAULT NULL, 结束
      `U_JE` decimal(12,2) DEFAULT NULL, 小时金额
       PRIMARY KEY (`U_ID`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;说明:没有在开始与结束时间范围内的不算费用U_ID U_Project U_Begin U_End U_JE
    1000 1000 08:00:00 15:00:00 20.00
    1100 1000 15:01:00 00:00:00 25.00
    3300 1200 08:00:00 15:00:00 20.00
    3400 1200 15:00:00 00:00:00 25.00求场地1000在2012-2-20 7:30:0 到 2012-2-23 10:0:0 之间产生的费用
    求解
      

  7.   

    我的思路是
    把2012-2-20 7:30:0 到 2012-2-23 10:0:0分为:
    2012-2-20 7:30:0 到 2012-2-20 23:59:59
    2012-2-21 0:0:0 到 2012-2-21 23:59:59
    2012-2-22 0:0:0 到 2012-2-22 23:59:59
    2012-2-23 0:0:0 到 2012-2-23 10:0:0将以上时间分别与
    U_ID U_Project U_Begin U_End U_JE 
    1000 1000 08:00:00 15:00:00 20.00 
    1100 1000 15:01:00 00:00:00 25.00
    中的时间重叠,算出重叠时间:
    2012-2-20 7:30:0 到 2012-2-20 23:59:59  08:00:00 15:00:00 重叠 为7:30:0 至 15:0:0
    2012-2-21 0:0:0 到 2012-2-21 23:59:59 重叠 为08:00:00 15:00:00 
    以此类推...
    再按重叠的分钟,设 m
    m/60+ (m模60 不为0 值为1)=小时数*U_JE=每小段金额
    再将小段金额累加,得出结果,
    求实现与优化
      

  8.   

    select sum(CEILING(TIMESTAMPDIFF(MINUTE,GREATEST('2012-2-20 7:30:0',U_Begin),LEAST('2012-2-20 7:30:0',U_End))/60)*U_JE)
    from T_ProjectJFSJ
    where U_Begin<'2012-2-23 10:0:0' and U_End>'2012-2-20 7:30:0'
    and U_ID=1000
      

  9.   

    到底是哪个数据,要求结果是什么贴建表及插入记录的SQL,及要求结果出来看看