2012-12-24 29 views
1

我在我的數據庫中有以下table獲取最新記錄的不同結果

enter image description here

我想編寫一個查詢,從上表中返回一些行。

返回的列表:

  1. 不應該包含的Currency2_Id
  2. 重複如果有發現,最新的記錄應返回

    以上表有一個例子Currency2_Id副本是兩個記錄,其中有Currency2_Id = 7。這兩條記錄的最新記錄是Date = 2012-12-28
    所以我的最終結果應該是這樣的。

enter image description here

這是我試過的查詢。

SELECT Id, Currency1_Id, Rate, Currency2_Id, Date 
FROM currency_ex_rate_txn 
GROUP BY Currency2_Id 
ORDER BY Date DESC 

但我得到的結果集包含Currency2_Id = 7Date = 2012-12-25,而不是與Currency2_Id = 7Date = 2012-12-28記錄備案。 任何幫助,將不勝感激。

+0

use'MAX(Date)' –

回答

4

試試這個:

SELECT 
    c1.Id, 
    c1.Currency1_Id, 
    c1.Rate, 
    c1.Currency2_Id, 
    c1.`Date` 
FROM currency_ex_rate_txn c1 
INNER JOIN 
(
    SELECT Currency2_Id, MAX(`date`) LatestDate 
    FROM currency_ex_rate_txn 
    GROUP BY Currency2_Id 
) c2 ON c1.Currency2_Id = c2.Currency2_Id 
    AND c1.`date`  = c2.LatestDAte 
ORDER BY c1.`Date` DESC; 
0

希望這能解決你的問題
SELECT Id, Currency1_Id, Rate, Currency2_Id, DATE FROM currency_ex_rate_txn WHERE Id IN (SELECT MAX(ID) FROM currency_ex_rate_txn GROUP BY Currency1_Id)

+0

感謝您的快速回復。我需要最新的記錄(按日期)。 – prageeth

2
SELECT Id, Currency1_Id, Rate, Currency2_Id, Date 
     FROM currency_ex_rate_txn c1 
      where Date = (select max(Date) from currency_ex_rate_txn c2 
          where c2.Currency1_Id = c1.Currency1_Id); 

順便說一句 - 這不是一個好主意,將保留字用作列名。

+0

感謝您的回覆。但是,這給了我在'max(Date)'(即.2012-12-28)上創建的所有記錄。只有'Currency2_Id'相同時,我才需要最新的記錄。特別感謝關於「保留字」的提示。 – prageeth