Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 这个代码实现了我想要的吗?_Mysql_Sql_Database - Fatal编程技术网

Mysql 这个代码实现了我想要的吗?

Mysql 这个代码实现了我想要的吗?,mysql,sql,database,Mysql,Sql,Database,我正在尝试创建一个查询,以评估某一特定车辆的车主是谁。车辆目击记录包含在车辆目击记录表中。这个查询有点棘手,因为vehicle_vrn和vehicle_Owner表是历史记录。因此,我需要做的是根据vehicle_sightings表中的seenDate字段,在观察点获取车辆的VRN和车主 SELECT sighting_id FROM vehicle_sightings INNER JOIN vehicle_vrn ON vehicle_sightin

我正在尝试创建一个查询,以评估某一特定车辆的车主是谁。车辆目击记录包含在车辆目击记录表中。这个查询有点棘手,因为vehicle_vrn和vehicle_Owner表是历史记录。因此,我需要做的是根据vehicle_sightings表中的seenDate字段,在观察点获取车辆的VRN和车主

SELECT 
    sighting_id
FROM
    vehicle_sightings
        INNER JOIN
    vehicle_vrn ON vehicle_sightings.plate = vehicle_vrn.vrnno
        INNER JOIN
    vehicle_ownership ON vehicle_vrn.fk_sysno = vehicle_ownership.fk_sysno
WHERE
    vehicle_sightings.seenDate >= vehicle_ownership.ownership_start_date
        AND (vehicle_sightings.seenDate <= vehicle_ownership.ownership_end_date
        OR vehicle_ownership.ownership_end_date IS NULL
        OR vehicle_ownership.ownership_end_date = '0001-01-01 00:00:00')
GROUP BY sighting_id
    HAVING seenDate >= MAX(ownership_start_date);  
我已经尝试了上述查询的许多变体,但除了上面粘贴的一个之外,似乎没有任何一个具有所需的结果。然而,我担心的是,它并没有像我希望的那样真正发挥作用,因为我对分组发言没有太多经验

因此,我想要的是,在下面的屏幕截图这样的情况下,使用所有权开始日期最接近seenDate的记录,而忽略其他记录。此外,在已指定结束日期的情况下,这些都不重要。此场景仅在未指定结束日期且有1个以上历史条目的情况下出现

我走对了吗?这个问题有意义吗?它是否也考虑了车辆vrn历史数据,因为也可能存在相同vrn有多个条目,但vrn开始日期不同的情况


你快到了。但是,您的HAVING条款不会产生任何影响,因为您在WHERE条款中明确要求每个组成记录的最新所有权开始日期必须在seenDate之前

您所追求的是,可以通过将分组结果连接回基础表来获得。例如:

SELECT * FROM vehicle_ownership JOIN (
  SELECT
      vehicle_sightings.*,
      vehicle_ownership.fk_sysno,
      MAX(vehicle_ownership.ownership_start_date) AS ownership_start_date
  FROM
      vehicle_sightings
          INNER JOIN
      vehicle_vrn ON vehicle_sightings.plate = vehicle_vrn.vrnno
          INNER JOIN
      vehicle_ownership ON vehicle_vrn.fk_sysno = vehicle_ownership.fk_sysno
  WHERE
      vehicle_sightings.seenDate >= vehicle_ownership.ownership_start_date
          AND (vehicle_sightings.seenDate <= vehicle_ownership.ownership_end_date
          OR vehicle_ownership.ownership_end_date IS NULL
          OR vehicle_ownership.ownership_end_date = '0001-01-01 00:00:00')
  GROUP BY sighting_id
) t USING (fk_sysno, ownership_start_date)

对不起我的英语。但看到的是什么意思?你能用这个模式准备一份报告吗?我试着读了你问题的其余部分,但我不清楚你想要什么。你需要包括一个更大的样本数据,并根据该数据解释期望的结果。还需要包括您的数据库模式。请阅读,这里是一个学习如何提高你的问题质量和获得更好答案的好地方。谢谢你的建议。事实上,我以前从未见过“using”语句——它是否有助于实现我所追求的目标?@DotNET:a JOIN b using col本质上只是a.col=b.col上JOIN b的简写,只是没有表限定符的col在结果中不会模棱两可。正如我在回答中所解释的,帮助您实现目标的是将分组结果合并回车辆所有权表。太好了,我将尝试一下!它是否也符合车辆的历史价值?除了获取最接近seenDate的车辆开始日期外,还需要获取vrn开始日期最接近seenDate的vrn500值seenDate@DotNET当前位置没有,我还没有解释。如果没有一些样本数据,我很难准确地描述正在发生的事情。。。尽管我认为您需要根据日期进一步限制车辆上的连接,方式与您对车辆所有权的操作基本相同。所有权开始日期。您能解释为什么在使用中都使用fk系统号和所有权开始日期吗?fk_sysno是一个整数列,ownership_start_date是一个日期列