在mysql中选择最后的不同记录

时间:2013-02-07 20:43:41

标签: mysql select distinct

我在mysql中有一个表有很多数据。我想只显示不同的和最后保存的数据...这里是我所拥有的

CREATE TABLE amounts(
    id MEDIUMINT NOT NULL AUTO_INCREMENT,
    bank_id INT,
    amount INT,
    PRIMARY KEY (id)
) ENGINE=MyISAM;
INSERT INTO `amounts` (`id`, `bank_id`, `amount`) VALUES (NULL, '1', '100'),
(NULL, '2', '200'),(NULL, '3', '300'),(NULL, '1', '500'),(NULL, '2', '600'),
(NULL, '1',   '800'),(NULL, '2', '50');

我想要这样的结果

  bank_id    amount
  1           800
  2            50
  3            300

如何选择查询?

3 个答案:

答案 0 :(得分:2)

使用自我加入。这几乎总是比子查询更快。

SELECT a.*
  FROM amounts a LEFT JOIN amounts b ON a.bank_id = b.bank_id AND a.id < b.id
  WHERE b.id IS NULL

See a demo

答案 1 :(得分:1)

这应该这样做:

SELECT a.bank_id, 
       b.amount 
FROM   (SELECT bank_id, 
               Max(id) AS id 
        FROM   amounts 
        GROUP  BY bank_id) a 
       INNER JOIN amounts b 
               ON b.id = a.id 

<强>结果

| BANK_ID | AMOUNT |
--------------------
|       1 |    800 |
|       2 |     50 |
|       3 |    300 |

See a demo

答案 2 :(得分:1)

您可以使用子查询为每个bank_id选择最大ID,然后选择该子查询返回其ID的所有行:

SELECT amounts.*
FROM   amounts
WHERE  id IN (select max(id)
              from amounts
              group by bank_id)
ORDER BY bank_id

请参阅this fiddle