我在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
如何选择查询?
答案 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
答案 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 |
答案 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。