我一直在研究数据库,其主要目标是管理一个大型停车场,跟踪所有进入/退出活动。
我现在要做的是找出一辆卡车在离开之前停留在停车区的时间以及它是否还在里面,计算时间。
这是DDLS
Table: inoutgateterra
Columns:
idinoutgateterra int(11) AI PK
nome varchar(15)
cognome varchar(15)
nbadge varchar(10)
identity_card varchar(15)
targaveicolo_INGATE varchar(10)
targatrailerdelivered_INGATE varchar(10)
targatrailerexpected_OUTGATE varchar(10)
targatrailer_OUTGATE varchar(10)
shippingcompany varchar(20)
DATA_INGATE datetime
DATA_OUTGATE datetime
bisarche_DDT varchar(15)
Table: ingatemare
Columns:
idingatemare int(11) AI PK
targatrailer_IN_NAVE varchar(10)
description varchar(10)
DATA_INGATEMARE datetime
id_veicolo_na_INGATEMARE varchar(20)
Table: outgatemare
Columns:
idoutgatemare int(11) AI PK
targatrailer_OUTNAVE varchar(10)
broker varchar(20)
description varchar(10)
DATA_OUTGATEMARE date
id_veicolo_na_OUTGATEMARE varchar(20)
这是我运行的查询。
SELECT
U . *,
C . *,
DATEDIFF(U.DATA_OUTGATE, C.DATA_OUTGATEMARE) NumDays,
DATEDIFF(CURDATE(), C.DATA_OUTGATEMARE) DAYS
from
(select
* from
trailersflow.outgatemare
WHERE DATA_OUTGATEMARE = outgatemare.DATA_OUTGATEMARE) C
left outer join trailersflow.inoutgateterra U
ON U.targatrailer_OUTGATE = C.targatrailer_OUTNAVE
AND U.DATA_OUTGATE >= C.DATA_OUTGATEMARE
ORDER BY idoutgatemare DESC;
现在,由于我们有频繁的客户,我有很多相同车牌(targatrailer)的记录和两个表中的不同日期,上面的查询比较它们都给了我几个我真正不需要的结果。 我最终想要执行datediff函数,不仅在牌照匹配(IN / OUT)时,还要将其限制在我在datediff函数中使用的最接近的日期。 该系统应类似于具有2个或更多进/出门的停车场经理
更新: 好吧,我必须弄清楚sqlfiddle的工作原理(以及它首先是什么).. 所以这是链接
http://sqlfiddle.com/#!2/be3a3e/1
我只是放置查询所需的字段:你可以看到我得到同一车牌的多个结果,我想保留一个与dateiff功能所需的最近日期相关的结果。 8月10日和15日,(停车5天)不是8月15日和7月25日(21天)。
我刚刚更新了sqlfiddle链接,删除了第三个条目,此查询不需要。