选择mysql中最后一个不同的记录
我在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',
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的新版本中是如何解决这一问题的