2017-02-12 96 views
0

请帮助我,MySQL查询到在拖timestamp列之间的范围丝束搜索发布日期的记录

上午发布2个日期以搜索去进行维护,并在特定日期离开车辆,然后这些结果在时间范围内分开。 我的表看起来像这样:

Ticket   VEhicle   Type   Model   Center   Depart   DateIn      DateOut 
________________________________________________________________________________________________________________________________________________ 
JBN-115   D113   MOTO BIKE  YBR125   254    403    2017-01-16 16:38:00   2017-01-25 08:54:00 
JBN-122   S001   CAR    TYT HILUX  254    410    2017-01-17 08:39:00   2017-01-17 09:39:00 
JBN-123   C003   MOTO BIKE  MAX100R   254    403    2017-01-16 09:50:00   2017-01-17 09:41:00 
JBN-124   D313   MOTO BIKE  YBR125   254    403    2017-01-16 16:38:00   2017-01-25 08:54:00 
JBN-125   S002   CAR    TYT HILUX  254    410    2017-01-17 12:39:00   2017-01-18 14:39:00 
JBN-126   C053   MOTO BIKE  MAX100R   254    403    2017-01-16 08:41:00   2017-01-31 09:41:00 
JBN-127   D133   MOTO BIKE  YBR125   254    403    2017-01-18 15:38:00   2017-01-25 08:54:00 
JBN-128   S008   MOTO BIKE  TYT HILUX  254    410    2017-01-17 13:13:00   2017-01-20 09:24:00 
JBN-129   C043   MOTO BIKE  MAX100R   254    403    2017-01-18 08:41:00   2017-01-31 09:41:00 
JBN-122   S012   CAR    TYT HILUX  254    410    2017-01-17 08:50:00   2017-01-17 19:39:00 
JBN-122   S062   MOTO BIKE  YBR125   254    410    2017-01-17 14:50:00   

因此,如果车辆去维修的发布日期范围,它仍然没有letf维修的地方,它会显示在结果中,即使日期Out是过去发表日期。 或者如果日期为空,它仍然会显示,因为它尚未离开该位置。

所以我运行一个查询2017年1月17日和2017年1月18日

查询应查找此车,因为你在秋季标准之间取得记录:

Ticket   VEhicle   Type   Model   Center   Depart   DateIn      DateOut 
________________________________________________________________________________________________________________________________________________ 
JBN-122   S001   CAR    TYT HILUX  254    410    2017-01-17 08:39:00   2017-01-17 09:39:00 
JBN-122   S012   CAR    TYT HILUX  254    410    2017-01-17 08:50:00   2017-01-17 19:39:00 
JBN-125   S002   CAR    TYT HILUX  254    410    2017-01-17 12:39:00   2017-01-18 14:39:00 
JBN-128   S008   MOTO BIKE  TYT HILUX  254    410    2017-01-17 13:13:00   2017-01-20 14:24:00 
JBN-122   S062   MOTO BIKE  YBR125   254    410    2017-01-17 14:50:00   

然后我正在跳跃查看查询像这样的输出:

Type  8am  10am 12pm 2pm  4pm 
_________________________________________________ 
CAR   2  1  2  2  2 
MOTO BIKE 0  0  1  2  2 

我已经试过这样:

select c.vtype, 
    (select COUNT(vtype) from Availability where (DATE_FORMAT(DateIn, '%Y-%m-%d %H:%i') < '2017-01-17 00:00' AND DATE_FORMAT(DateOut, '%Y-%m-%d %H:%i') < '2017-01-18 10:00') AND costCente = '254' AND vtype =c.vtype) as Eight, 
    (select COUNT(vtype) from Availability where (DATE_FORMAT(DateIn, '%Y-%m-%d %H:%i') < '2017-01-17 10:00' AND DATE_FORMAT(DateOut, '%Y-%m-%d %H:%i') < '2017-01-18 12:00') AND costCente = '254' AND vtype =c.vtype) as Ten, 
    (select COUNT(vtype) from Availability where (DATE_FORMAT(DateIn, '%Y-%m-%d %H:%i') < '2017-01-17 12:00' AND DATE_FORMAT(DateOut, '%Y-%m-%d %H:%i') < '2017-01-18 14:00') AND costCente = '254' AND vtype =c.vtype) as Twelve, 
    (select COUNT(vtype) from Availability where (DATE_FORMAT(DateIn, '%Y-%m-%d %H:%i') < '2017-01-17 14:00' AND DATE_FORMAT(DateOut, '%Y-%m-%d %H:%i') < '2017-01-18 16:00') AND costCente = '254' AND vtype =c.vtype) as Tow, 
    (select COUNT(vtype) from Availability where (DATE_FORMAT(DateIn, '%Y-%m-%d %H:%i') < '2017-01-17 16:00' AND DATE_FORMAT(DateOut, '%Y-%m-%d %H:%i') < '2017-01-18 19:00') AND costCente = '254' AND vtype =c.vtype) as Four 
    from Availability c where costCente = '254' GROUP BY vtype ORDER BY vtype DESC 
+0

你试过了什么? –

+0

我已经尝试过上述编辑,但仍然不能正常工作 – Rhynix

回答

0

我不确定您的时间范围是什么条件,例如上午8点:DateIn <'2017-01-17 00:00'和DateOut <'2017-01-18 10:00',之间没有任何关联早上8点和这个。 所以我想早上8点是多少车辆,其仍然在0点之间维持到上午8点

SET   @FromTime = '2017-01-17 00:00:00', 
      @ToTime  = '2017-01-18 23:59:59'; 

SELECT  Type, 
      sum(if(DateIn between @FromTime and @FromTime+interval 8 hour,1,0)) as `8am`, 
      sum(if(DateIn between @FromTime +interval 8 hour and @FromTime+interval 10 hour,1,0)) as `10am`, 
      sum(if(DateIn between @FromTime +interval 10 hour and @FromTime+interval 12 hour,1,0)) as `12am`, 
      sum(if(DateIn between @FromTime +interval 12 hour and @FromTime+interval 14 hour,1,0)) as `2pm`, 
      sum(if(DateIn between @FromTime +interval 14 hour and @FromTime+interval 16 hour,1,0)) as `4pm` 

FROM  Availability 

WHERE  costCente = '254' 
      AND DateIn >= @FromTime AND if(DateOut = '',DateIn,DateOut) <= @ToTime 

GROUP BY 1 
ORDER BY 1 DESC; 

你可以,如果适合您的情况下修改条件计数范围内的时间。

+0

它不会在其余时间添加未来日期。就像日期是空白或超过发布的日期范围一样,它应该已经显示车辆在整个日期的位置。 (所有时间间隔) – Rhynix

+0

我相信它在我的WHERE条件:) if(DateOut ='',DateIn,DateOut)<= @ToTime –