1

我在 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 金额
  1 800
  2 50
  3 300

将如何选择查询?

4

3 回答 3

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

查看演示

于 2013-02-07T20:50:00.957 回答
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 | 数量 |
--------------------
| 1 | 800 |
| 2 | 50 |
| 3 | 300 |

查看演示

于 2013-02-07T20:47:22.937 回答
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

请看这个小提琴

于 2013-02-07T20:47:57.717 回答