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
  3300

これに対するクエリをどのように選択しますか?

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 に答える