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

mysql:8125

From: "Kawaji, Shinya" <"Kawaji, Shinya" <kawaji@xxxxxxxxxx>>
Date: Sat, 09 Aug 2003 23:37:26 +0900
Subject: [mysql 08125] Re: 特定フィールドの異なりによる抽出

かわじ、です。


> このとき、SOURCE ごとに一つずつ取り出した次のような結果を得たいのです。

正確に言えば

  SOURCE ごとに「IDが最小の行を」一つずつ取り出した次のような結果

ということですよね?


MySQL 4.1 以上になると副問い合わせが出来ますが、まだ安定版ではないので、
それ以下でする場合は、以下のマニュアルに記されている方法になるかと
思います。
http://www.mysql.com/doc/en/example-Maximum-column-group-row.html

temporary table を使うやり方と、"MAX-CONCAT trick" なるものを使うやり方
が書かれています。

後者の方を、今回の場合に用いると、以下のようになります。
(MAX ではなく、"MIN-CONCAT trick" ですが)


-- 10 や 11 のところは、ID の最大文字長に合わせて下さい。
select
  0 + left(  min(concat(lpad(ID, 10, '0'), ID) ), 10) as ID,
  SOURCE,
  CONTENT,
  substring( min(concat(lpad(ID, 10, '0'), NOTE)), 11) as NOTE
from
  SAMPLE
where
  CONTENT = 'x'
group by
  SOURCE
;
+------+--------+---------+------+
| ID   | SOURCE | CONTENT | NOTE |
+------+--------+---------+------+
|    1 | A      | x       | abc  |
|    6 | C      | x       | rst  |
+------+--------+---------+------+

select
  0 + left(  min(concat(lpad(ID, 10, '0'), ID) ), 10) as ID,
  SOURCE,
  CONTENT,
  substring( min(concat(lpad(ID, 10, '0'), NOTE)), 11) as NOTE
from
  SAMPLE
where
  CONTENT = 'y'
group by
  SOURCE
;
+------+--------+---------+------+
| ID   | SOURCE | CONTENT | NOTE |
+------+--------+---------+------+
|    3 | A      | y       | hij  |
|    4 | B      | y       | klm  |
|    7 | C      | y       | vwx  |
+------+--------+---------+------+


エレガントとは言いづらいですし、保守しやすいとも言えませんが、
一応、SQL一発で出来るということで・・・

マニュアルにある temporary table 作成の方法は、一つしか table を
作らないので、その方が良いかも知れません。



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

      8122 2003-08-09 21:39 ["TOYOSHIMA,Masayuki"] 特定フィールドの異なりによる抽出        
      8123 2003-08-09 22:33 ┣[yamada <tirutiru@xxx]                                       
      8124 2003-08-09 22:53 ┃┗[yamada <tirutiru@xxx]                                     
->    8125 2003-08-09 23:37 ┗["Kawaji, Shinya" <ka]                                       
      8126 2003-08-10 07:21  ┣["TOYOSHIMA,Masayuki"]                                     
      8127 2003-08-10 08:17  ┃┗["Kawaji, Shinya" <ka]                                   
      8128 2003-08-10 08:59  ┃ ┗["TOYOSHIMA,Masayuki"]                                 
      8129 2003-08-10 09:24  ┗["KAWAI,Takanori" <GC]                                     
      8130 2003-08-10 13:07   ┗["TOYOSHIMA,Masayuki"]