2012-03-08 108 views
-1

好的,我在一個表中有一個TankID和一個UnitNumber,另一個表中有一個ExpiredDate,但該表有多個同一個tankID的過期日期,我只想要max(ExpiredDate) 。SQL查詢從不同的表中獲取最大日期

TankID UnitNumber ExpiredDate 
    20666 107   2009-08-31 00:00:00 
    20666 107   2010-08-31 00:00:00 
    20666 107   2011-08-31 00:00:00 
    20666 107   2012-08-31 00:00:00 
    20666 107   NULL 

現在我只想回到

20666 107 2012-08-31

我試着這樣做:

 select tanks.TankID, tanks.UnitNumber, MAX(Table2.ExpireDate) 
     from Tanks 
     join Table2 on Tanks.TankID = Table2.TankID 
     where CompanyID = '1111' 
     and Tanks.TankID = '22222' 
     order by Tanks.TankID 

這顯然是行不通的,是否有人知道如何做到這一點?由於

回答

0

嘗試

SELECT tanks.tankId, tanks.unitNumber, (SELECT MAX(table2.ExpiraDate) FROM table2 WHERE table2.tankID = tanks.tankID) AS max_expire_date 
FROM tanks 
where CompanyID = '1111' 
and Tanks.TankID = '22222' 
order by Tanks.TankID 
+0

謝謝,那很好用 – user1202606 2012-03-08 22:46:11

0
select tanks.TankID, tanks.UnitNumber, 
      (select MAX(Table2.ExpireDate) from Table2 where table2.TankID = Tanks.TankID) ExpireDate 
    from Tanks 
    where CompanyID = '1111' 
    and Tanks.TankID = '22222' 
    order by Tanks.TankID 

select tanks.TankID, tanks.UnitNumber, maxExpireDate.ExpireDate 
    from Tanks join 
     (
      select TankID, MAX(Table2.ExpireDate) ExpireDate 
      from Table2 
      group by TankID 
     ) maxExpireDate 
     on Tanks.TankID = maxExpireDate.TankID 
    where CompanyID = '1111' 
    and Tanks.TankID = '22222' 
    order by Tanks.TankID 
0

我粘貼兩種方法可以做到這一點。這兩個查詢以不同的方式執行相同的操作。我使用模擬數據設置了一個表變量,以便您可以在本地數據庫(或任何位置)測試它,並查看它是否有效。

DECLARE @Tanks TABLE 
(
    CompanyId INT NOT NULL, 
    TankId INT NOT NULL, 
    UnitNumber INT NOT NULL 
) 

DECLARE @Expirations TABLE 
(
    TankId INT NOT NULL, 
    ExpiredDate DATETIME NULL 
) 

INSERT @Tanks 
(
    CompanyId 
    , TankId 
    , UnitNumber 
) 
VALUES 
    (1111, 22222, 107) 

INSERT @Expirations 
(
    TankId 
    , ExpiredDate 
) 
VALUES 
    (22222, '2009-08-31 00:00:00') 
    , (22222, '2010-08-31 00:00:00') 
    , (22222, '2011-08-31 00:00:00') 
    , (22222, '2012-08-31 00:00:00') 
    , (22222, NULL) 

SELECT 
    Tanks.TankId 
    , Tanks.UnitNumber 
    , Expiration.MaxExpiredDate 
FROM @Tanks Tanks 
CROSS APPLY 
(
    SELECT MAX(E.ExpiredDate) MaxExpiredDate FROM @Expirations E WHERE E.TankId = Tanks.TankId 
) Expiration 
WHERE Tanks.CompanyId = 1111 AND Tanks.TankId = 22222 

SELECT 
    Tanks.TankId 
    , Tanks.UnitNumber 
    , MAX(Expirations.ExpiredDate) ExpiredDate 
FROM @Tanks Tanks 
LEFT JOIN @Expirations Expirations 
    ON Expirations.TankId = Tanks.TankId 
WHERE Tanks.CompanyId = 1111 AND Tanks.TankId = 22222 
GROUP BY Tanks.TankId, Tanks.UnitNumber 
相關問題