[前][次][番号順一覧][スレッド一覧]

mysql:8913

From: UNO Shintaro <UNO Shintaro <uno@xxxxxxxxxx>>
Date: Sun, 07 Mar 2004 04:48:34 +0900
Subject: [mysql 08913] Re: DISTINCT オプションの動作について

> NO |  MESSAGE   |   DATE
>----+------------+-----------
>  1 | あいうえお | 2004-02-01
>  1 | かきくけこ | 2004-02-05
>  2 | さしすせそ | 2004-02-08
>  3 | たちつてと | 2004-02-13
>  2 | なにぬねの | 2004-02-19
>  4 | はひふへほ | 2004-02-19
>
>と言うデータがあった場合、「NO」が重複するレコードは1つだけ取得し、
>「DATE」を条件にSELECTしたいのですが、その時「NO」が重複する
>レコードを1つだけ取得する際に「DATE」が最新の方を取得したいのです。

DATEっていうカラム名って許されるんでしたっけ…?

NOとDATEを出したいだけなら、

・集合関数を使う
  SELECT NO,MAX(DATE) AS DATE FROM tbl GROUP BY NO;


さらにMESSAGEも出したいのなら、

・自己ジョインを使う
  SELECT a.* FROM tbl AS a LEFT JOIN tbl AS b
   ON a.NO=b.NO AND a.DATE < b.DATE WHERE b.NO IS NULL;

・集合関数とテンポラリテーブルを使う
  DROP TABLE IF EXISTS tt;
  CREATE TEMPORARY TABLE tt SELECT 
     NO,MAX(DATE) AS DATE FROM tbl GROUP BY NO;
  SELECT tbl.* FROM tt INNER JOIN tbl USING (NO,DATE);


という感じでしょうか。

-- 
UNO Shintaro, 宇野 信太郎
mailto:uno@xxxxxxxxxx
http://www.venus.dti.ne.jp/~uno/

[前][次][番号順一覧][スレッド一覧]

      8911 2004-03-07 02:49 [<konet218@xxxxxxxxxx] DISTINCT オプションの動作について       
      8912 2004-03-07 03:52 ┣[ML account <ml@xxxxx]                                       
      8918 2004-03-07 16:51 ┃┗[KAWAJI Shinya <kawaj]                                     
      8920 2004-03-07 22:06 ┃ ┗[ML account <ml@xxxxx]                                   
->    8913 2004-03-07 04:48 ┗[UNO Shintaro <uno@xx]                                       
      8914 2004-03-07 06:20  ┣[Sumito_Oda <oda@xxxx] 予約語 (Re: DISTINCT オプションの動作について)
      8915 2004-03-07 06:23  ┗[<konet218@xxxxxxxxxx]                                     
      8916 2004-03-07 13:36   ┗[ML account <ml@xxxxx]                                   
      8919 2004-03-07 18:56    ┗[UNO Shintaro <uno@xx]                                 
      8921 2004-03-07 22:06     ┗[ML account <ml@xxxxx]                               
      8923 2004-03-07 22:29      ┗[UNO Shintaro <uno@xx]