2015-05-29 130 views
0

我有两个表名为ReefersAlerts。我想加入这两个表格。如何获得Ms Access表的最后一条记录

现在,如何得到的结果显示每个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")); 

UPDATE:

我改变所需的结果。而不是单词Null,请保留空白,以便Reefers不带温度AlertType

+0

如何缩小“E-110/E-111”的范围?就像,如果有10个不同的记录,但没有一个具有“温度”......有10个空记录吗? –

+0

E-110和E-110是冷藏箱编号(ID)。这两个冷藏车没有温度警报,这就是为什么它显示的结果为空或让我们说空白。 –

回答

0

开始与查询其拉你想要的一切,对于那些冷藏其中至少有一个温度警报:

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冷藏表子查询基础上,首先查询...

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; 
+0

非常感谢@HansUp。你解决了我的问题! –

相关问题