使用最新记录获得不同的结果

时间:2012-12-24 13:42:13

标签: mysql

我的数据库中有table

enter image description here

我正在尝试编写一个返回上表中某些行的查询。

返回列表:

  1. 不应包含Currency2_Id
  2. 的重复项
  3. 如果找到重复的Currency2_Id,则应返回最新记录

    对于上表中的示例,有两条记录具有Currency2_Id = 7。这两个人的最新记录是Date = 2012-12-28的记录。
    所以我的最终结果应该是这样的。

  4. 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的记录。 任何帮助将不胜感激。

3 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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);

BTW - 使用保留字作为列名不是一个好主意。

答案 2 :(得分: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)