如何从 Ms Access table 获取最后一条记录

How to get the last record from Ms Access table

我有 2 个 table 名为 ReefersAlerts。我想加入这两个table。

现在,如何从 Alerts table 中获取显示每个 ReeferNo 的最后一条记录的结果,其中 AlertType等于"Temperatures"

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 一词,而是将其留空

从一个查询开始,该查询为那些至少有一个温度警报的 Reefers 提取您想要的一切:

SELECT
    sub1.ReeferNo,
    a2.AlertDateTime,
    a2.ReceivedDateTime,
    a2.AlertType,
    a2.Temperature,
    a2.Location
FROM
    (
        SELECT
            a1.ReeferNo,
            Max(a1.AlertDateTime) AS MaxOfAlertDateTime
        FROM Alerts AS a1
        WHERE a1.AlertType='Temperatures'
        GROUP BY a1.ReeferNo
    ) AS sub1
    INNER JOIN Alerts AS a2
    ON
            (sub1.MaxOfAlertDateTime = a2.AlertDateTime)
        AND (sub1.ReeferNo = a2.ReeferNo);

然后 LEFT JOIN Reefers table 到基于第一个查询的子查询 ...

SELECT
    r.ReeferNo,
    r.Transporter,
    sub2.AlertDateTime,
    sub2.ReceivedDateTime,
    sub2.AlertType,
    sub2.Temperature,
    sub2.Location
FROM
    Reefers AS r
    LEFT JOIN
    (
        SELECT
            sub1.ReeferNo,
            a2.AlertDateTime,
            a2.ReceivedDateTime,
            a2.AlertType,
            a2.Temperature,
            a2.Location
        FROM
            (
                SELECT
                    a1.ReeferNo,
                    Max(a1.AlertDateTime) AS MaxOfAlertDateTime
                FROM Alerts AS a1
                WHERE a1.AlertType='Temperatures'
                GROUP BY a1.ReeferNo
            ) AS sub1
            INNER JOIN Alerts AS a2
            ON
                    (sub1.MaxOfAlertDateTime = a2.AlertDateTime)
                AND (sub1.ReeferNo = a2.ReeferNo)
        ) AS sub2
    ON r.ReeferNo = sub2.ReeferNo;