按日期查找每个不同列值的最新记录

时间:2016-05-23 20:01:40

标签: mysql

我正在使用与以下格式类似的数据集:

SimpleMDE

我需要一个返回的查询,它返回表中每个不同值的最新记录。因此,上表将返回

Table: Account
*-----------*----------*-------------*
|     id    |  amount  |   date      |
*-----------*----------*-------------*
|      1    |   100    |  01/01/2016 |
|      2    |   100    |  01/02/2016 |
|      3    |   100    |  01/03/2016 |
|      4    |   200    |  01/04/2016 |
|      5    |   200    |  01/05/2016 |
|      6    |   200    |  01/06/2016 |
|      7    |   300    |  01/07/2016 |
|      8    |   300    |  01/08/2016 |
|      9    |   300    |  01/09/2016 |
|     10    |   400    |  01/10/2016 |
*-----------*----------*-------------*

我仍然是子查询的新手,但我尝试了以下

*-----------*----------*-------------*
|     id    |  amount  |   date      |
*-----------*----------*-------------*
|      3    |   100    |  01/03/2016 |
|      6    |   200    |  01/06/2016 |
|      9    |   300    |  01/09/2016 |
|     10    |   400    |  01/10/2016 |
*-----------*----------*-------------*

然而,这仅返回最新日期。如何获取金额列中每个不同值的最新日期。

1 个答案:

答案 0 :(得分:2)

如果您只需要金额:

SELECT amount, MAX(date) from myTable group by amount

如果您需要更多数据:

SELECT * from myTable where (amount, date) IN (
    SELECT amount, MAX(date) as date from table group by amount
)

或许这会跑得更快:

SELECT * from myTable A WHERE NOT EXISTS (
    SELECT 1
    FROM myTable B
    WHERE A.date < B.date
      AND A.amount = B.amount
)