我们在停车场的入口和出口有两个车牌读取器摄像机,当进行检测时,它们会生成一个CSV文件,然后将其自动加载到数据库中,并且在入口处由摄像机的自动操作的屏障“白名单”,依次从数据库内部生成和控制“白名单”,并将其导出到文本文件中。

最初,我认为按照下面的设计,这将是一个简单的3表数据库,但我很快意识到事实并非如此:

我的最初设计:

tbl_in :      ID (autonum/PK), Plate, Date_in, Time_in
tbl_out:      ID (Autonum/PK), Plate, Date_out, Time_out
tblwhitelist: Plate(PK), Country Code, Description


目前,我能想到的唯一关系是:

白名单plate-Plate_in&plate_out,其中白名单中的一个板可在in&out表中多次看到



然后,由于已指定的查询(这在我的大脑真正融化的地方!)使情况变得更加复杂(方括号显示了列,并且我在考虑结果的基本逻辑):


“今天的站点上已列入白名单的车辆”(如果IF板在白名单上:板,说明,Time_in,Time_out [如果今天在OUT表中看到该板,则为null])
“今天看到的非列入白名单的车辆”(如果车牌不在白名单上:车牌,Time_in,Time_out [如果车牌在OUT表中看到,则为null])
“列入白名单的车辆在现场的时间为今天/过去7天/过去30天/过去90天(如果白名单上的车牌:车牌,说明,Date_in,Time_in,Date_out,Time_out),则在同一时间多次重复相同的车牌条目现场
“非列入白名单的车辆在现场的时间为今天/过去7天/过去30天/过去90天(如果车牌不在白名单中:车牌,Date_in,Time_in,Date_out,Time_out),这将多次重复相同车牌的条目现场


我真正需要帮助的是关于如何整理查询代码以使其正常工作的一些想法。这是该项目中对我而言最后的主要障碍之一。不幸的是,这是珠穆朗玛峰的最大障碍。您能提供的任何帮助将不胜感激!

最佳答案

我同意Straweberry的帖子,您不需要inout两个表。您可以为此提供一个:

 tblVehicleEvent : ID (autonum/PK), Plate, EventDate, EventTime, EventType


其中EventType具有IN或OUT值。

或者您可以合并TimeIn和TimeOut以及DateIn和DateOut,例如:

 tblVehicleEvent : ID (autonum/PK), Plate, DateIn, DateOut, TimeIn, TimeOut


我认为第二个查询将根据您的需求在以后的查询中更加轻松。

查询将如下所示:


今天已列入站点白名单的车辆”(IF板已列入白名单:
板,说明,Time_in,Time_out [如果在OUT表上看到板
今天,否则为null])

从tblVehcileEvent V中选择W.Plate,描述,TimeIn,TimeOut
  内部加入tbl白名单W
  开启V.Plate = W.Plate
  在哪里DateIn = curdate()
“今天看到的非列入白名单的车辆”(如果白名单中没有该板块:
板块,Time_in,Time_out [如果板块在OUT表上看到,否则
空值])

选择板,TimeIn,TimeOut
 来自tblVehicleEvent
 板不在的位置(从tblWhitelist中选择板)
“列入白名单的车辆在现场的时间为今天/过去7天/过去30天
天/过去90天(如果白名单上的IF板:板,说明,
Date_in,Time_in,Date_out,Time_out),这将重复
在现场多次输入相同的板

SELECT W.Plate,说明,TimeIn,TimeOut
  来自tblVehcileEvent V
  内部加入tbl白名单W
  开启V.Plate = W.Plate
  在startDate和EndDate之间的DateIn
“非列入白名单的车辆在现场的时间为今天/过去7天/过去30天
天/过去90天(如果车牌不在白名单中:车牌,Date_in,
Time_in,Date_out,Time_out)。
同一盘多次在现场

选择板,TimeIn,TimeOut
  来自tblVehicleEvent
  板不在的位置(从tblWhitelist中选择板)
  startDate和EndDate之间的AND DateIn

10-07 12:26