总的来说,我对 SQL 有点陌生,我设法通过了这么远的方式,但现在我有点卡住了。
我有两张表,一张是“船舶”到“石油类型”的索引,只是 Id 的。另一个表“ROB”是船上剩余的油量。
每个月我可能会或可能不会在 ROB 表中获得新记录。
我需要的是每艘船的每种不同的油类型,以及最新的 ROB(如果有的话)。
下面的查询让我几乎得到了我想要的,除了我得到了每种油类型的所有 ROB 并且我只想要最新的。
PARAMETERS QueryShipID Short;
SELECT Oils.OilID, Oils.ShipID, ROB.LastROB, ROB.Received, ROB.DateReceived, ROB.PortReceived, ROB.TotalUsed, ROB.CurrentROB, ROB.DateSent
FROM
(SELECT DISTINCT OilID, ShipID
FROM [Index]
WHERE (((ShipID)=[QueryShipID])))
AS Oils
LEFT JOIN
(SELECT ShipID, OilId, LastROB, Received, DateReceived, PortReceived, TotalUsed, CurrentROB, DateSent
FROM [Oil ROB])
AS ROB
ON (Oils.ShipID = ROB.ShipID) AND (Oils.OilID = ROB.OilID);
我需要做的是获取每种油类型的最后一个 DateSent。
我发现了一些关于使用 Max 函数的教程,这些教程似乎建议将聚合查询的结果连接回原始表。但是我似乎无法让它工作,它会产生一个巨大而混乱的查询。
如果有人对最好的方法有一些建议,我将不胜感激。
理想情况下,在这样做之后,我想为日期添加一个参数,这样您就可以获得某个日期之前的最后一个 ROB。这应该相对容易,但我将其包括在内,以防它对答案有任何影响。
谢谢。
戴夫