【发布时间】:2026-02-13 10:55:01
【问题描述】:
我有 2 个名为 Reefers 和 Alerts 的表。我想加入这两个表。
现在,如何从 Alerts 表中获得显示每个 ReeferNo 的最后一条记录的结果,其中 AlertType 等于 “温度”?
TABLE 1: Reefers
ReeferNo Transporter
E-110 Express1
E-111 Express1
E-112 Express1
A-001 A-Trucking
A-002 A-Trucking
TABLE 2: Alerts
AlertDateTime ReceivedDateTime AlertType ReeferNo Temperature Location
5/2/15 9:53 AM 5/2/15 9:58 AM Arrival E-110 5.2 Warehouse
5/2/15 9:48 AM 5/2/15 9:53 AM Departure E-111 5.4 Warehouse
5/2/15 9:40 AM 5/2/15 9:45 AM Temperatures A-001 11.37 Warehouse
5/2/15 9:38 AM 5/2/15 9:43 AM Temperatures A-001 10.06 Store
5/2/15 9:35 AM 5/2/15 9:40 AM Temperatures A-001 10.02 Store
5/2/15 9:19 AM 5/2/15 9:24 AM Departure A-001 10.02 Store
5/2/15 9:12 AM 5/2/15 9:17 AM Temperatures A-002 10.37 Warehouse
5/2/15 9:06 AM 5/2/15 9:11 AM Temperatures A-002 12.62 Warehouse
5/2/15 9:04 AM 5/2/15 9:09 AM Arrival A-002 12.62 Warehouse
结果必须是:
ReeferNo Transporter AlertDateTime ReceivedDateTime AlertType Temperature Location
E-110 Express1
E-111 Express1
E-112 Express1
A-001 A-Trucking 5/2/15 9:40 AM 5/2/15 9:45 AM Temperatures 11.37 Warehouse
A-002 A-Trucking 5/2/15 9:12 AM 5/2/15 9:17 AM Temperatures 10.37 Warehouse
我正在使用下面的代码,但它没有给我想要的结果。
SELECT Reefers.ReeferNo, Reefers.Transporter, Alerts.AlertType,
Alerts.AlertDateTime, Alerts.Temperature, Alerts.Location,
Alerts.ReceivedDateTime
FROM Reefers INNER JOIN (Alerts INNER JOIN (SELECT
Alerts.ReeferNo,
MAX(Alerts.ReceivedDateTime)
AS MaxReceivedDateTime
FROM Alerts
GROUP BY Alerts.ReeferNo) AS temptable ON (Alerts.ReeferNo =
temptable.ReeferNo) AND (Alerts.ReceivedDateTime =
temptable.MaxReceivedDateTime)) ON Reefers.ReeferNo = Alerts.ReeferNo
WHERE (((Alerts.AlertType)="Temperatures"));
更新:
我更改了所需的结果。对于没有温度 AlertType 的 Reefers,请将其留空,而不是 Null。
【问题讨论】:
-
如何缩小
E-110 / E-111的范围?比如,如果有 10 条不同的记录,但它们都没有Temperatures.. 是否有 10 条 NULL 记录? -
E-110 和 E-110 是冷藏箱编号 (ID)。这两个 Reefers 没有温度警报,这就是为什么它显示结果为 Null 或让我们说空白。