1

我的数据库中有以下内容table

在此处输入图像描述

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

返回名单:

  1. 不应包含的重复项Currency2_Id
  2. 如果发现有重复Currency2_Id,则返回最新记录

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

在此处输入图像描述

这是我尝试过的查询。

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

但是我得到的结果集包含带有 and 的记录,Currency2_Id = 7Date = 2012-12-25不是带有 and 的Currency2_Id = 7记录Date = 2012-12-28。任何帮助,将不胜感激。

4

3 回答 3

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;
于 2012-12-24T13:44:34.890 回答
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);

顺便说一句 - 使用保留字作为列名不是一个好主意。

于 2012-12-24T13:47:00.553 回答
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)

于 2012-12-24T13:46:03.803 回答