选择mysql中最后一个不同的记录

选择mysql中最后一个不同的记录,mysql,select,distinct,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',

我在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 如何为此选择查询?

这应该可以做到:

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 
结果

这应该做到:

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 
结果


您可以使用一个子查询,为每个银行id选择最大id,然后选择此子查询返回其id的所有行:

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

请参阅。

您可以使用一个子查询,其中为每个银行id选择最大id,然后选择此子查询返回其id的所有行:

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

请参阅。

使用自联接。这几乎总是比子查询快

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

使用自联接。这几乎总是比子查询快

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

无法保证自动增量值实际上是连续的,因此无法确定最后插入的是哪条记录。使用时间戳可以获得有关插入时间的明确信息。@mchl它们可能不是连续的,但肯定会一直递增。请参阅此处的“多主机复制设置”、“自动增量”和“自动增量”偏移设置:您的SQL代码不应假设任何有关服务器配置的信息。@Mchl感谢您提供的链接。。。我正在看一看!当然这将是一种罕见的情况,但正如我所说的,不要对服务器做任何假设。不能保证自动增量值实际上是连续的,所以无法确定最后插入的是哪条记录。使用时间戳可以获得有关插入时间的明确信息。@mchl它们可能不是连续的,但肯定会一直递增。请参阅此处的“多主机复制设置”、“自动增量”和“自动增量”偏移设置:您的SQL代码不应假设任何有关服务器配置的信息。@Mchl感谢您提供的链接。。。我正在看一看!当然这将是一个罕见的事件,但就像我说的,永远不要假设任何关于服务器的事情。不知道为什么我的答案和njk答案得到了否决票。。。他们都是正确的,使用subqueryA的下意识反应也没什么错,那些人曾经读过“子查询是邪恶的”,但没有深入研究什么样的子查询速度慢,以及在MySQL的新版本中如何解决这个问题。我不知道为什么我的答案和njk答案遭到否决。。。它们都是正确的,使用subqueryA是人们的下意识反应,他们曾经读过“子查询是邪恶的”,但没有深入研究什么样的子查询速度慢,以及在MySQL的新版本中是如何解决这一问题的