【发布时间】:2016-03-14 23:07:45
【问题描述】:
我正在尝试创建一个查询,用于评估特定车辆的所有者在某个时间点的身份。车辆的目击记录包含在vehicle_sightings 表中。这个查询有点棘手的是,vehicle_vrn 和 vehicle_ownership 表是历史的。所以我需要做的是在瞄准点获取车辆的 VRN 和所有者(基于 vehicle_sightings 表中的seenDate 字段。
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);
我已经尝试了上述查询的许多变体,但除了上面粘贴的那个之外,它们似乎都没有得到想要的结果。然而,我担心的是它并没有像我想要的那样工作,因为我对GROUP BY 语句没有太多经验。
因此,我想要的是,在像下面的屏幕截图这样的情况下,使用ownership_start_date 最接近seenDate 的记录,而忽略其他记录。此外,在指定了 end_date 的情况下,这些都无关紧要。此场景仅在未指定 end_date 且历史条目超过 1 个的情况下出现。
我在正确的轨道上吗?这个查询有意义吗?它是否也考虑了vehicle_vrn 历史数据,因为也可能存在相同vrn 有多个条目但vrn_start_dates 不同的情况。
【问题讨论】:
-
对不起我的英语。但目击意味着
was seen?你能用架构准备一个sqlfiddle.com吗? -
我尝试阅读您的问题的其余部分,但我不清楚您想要什么。您需要包含更大的样本数据,并根据该数据解释期望的结果。还需要包含您的数据库架构。请阅读How-to-Ask 这里是START 了解如何提高问题质量并获得更好答案的好地方。