MySQLの質問です。

GROUP BYでグループ化したレコードの中からレコード1つ丸ごと選択することは可能でしょうか?

例えばフィールド5つで構成されているDBをフィールド1でグループ化しフィールド2(日付などの時間を格納したフィールド)の最も新しいレコード(フィールド5つ全部)を各グループから抽出したいのですが思いつきません。

うまく説明ができないのですが、お分かりの方がいたら教えて下さい。

回答の条件
  • 1人10回まで
  • 登録:2008/06/20 03:13:34
  • 終了:2008/06/27 03:15:02

回答(3件)

id:maple-aria No.1

maple-aria回答回数11ベストアンサー獲得回数12008/06/20 11:35:42

ポイント27pt

グループ化したそれぞれのグループの中で

一番新しいレコードをそのまま取得したいということでしょうか?

自己結合、というものを使用すればうまくいくかと思います。

SELECT *

FROM tabble_name AS original

INNER JOIN

( SELECT type, MAX(insert_date) AS insert_date

FROM table_name

GROUP BY type

) AS grouped

ON original.type = grouped.type

WHERE original.insert_date = grouped.insert_date

ORDER BY type

http://codezine.jp/a/article/aid/460.aspx

id:sho49cc No.2

sho49cc回答回数4ベストアンサー獲得回数02008/06/20 11:42:09

ポイント27pt

状況が飲み込めませんが、こんな感じのことがやりたいのでしょうか。

もう少し具体的に書かれたほうが求める答に近づけそうです。

(最低でもCreate Table文くらいないと。出来ればサンプルデータも。)

SELECT t1.* FROM t t1

JOIN (SELECT field1,

MAX(field2) as field2_max

FROM t

GROUP BY field1) t2

ON t1.field1 = t2.field2

AND t1.field2 = t2.field2_max

もちろん、field1がある程度グルーピングする価値のある情報群で、

field2がグループ内である程度かぶらないという条件付きになります。

テストせず適当に描いたので動かないかもしれませんが、ニュアンス的なヒントになれば・・・。

id:chuken_kenkou No.3

chuken_kenkou回答回数722ベストアンサー獲得回数542008/06/20 12:12:47

ポイント26pt

MySQLのバージョンは、何でしょうか?

MySQL 4.1以降なら、次のようなSQLで、期待した結果を得られます。

<SQL例>c1の値毎に、c2の最大値を求め、その行のすべての列値を得る

SELECT *
 FROM t1 AS x
 WHERE c2=(SELECT MAX(c2)
            FROM t1
            WHERE x.c1=c1)


なお、MySQLでは、GROUP BY使用時のSELECTでの選択式について、拡張仕様を持っています。

次のSQLは、標準SQLを含め、多くの主要RDBMSでは文法エラーになりますが、MySQLでは文法エラーにならず、結果を返します。ただし、前提条件を満たしていないと、結果は保証されません。

SELECT c1,c2,c3,MAX(c4)
  FROM t1
  GROUP BY c1

上記のSQLの場合、c1でグループ化しているのに、c2とc3の列値を検索するような指定になっています。標準SQLでは、GROUP BYで指定した列か、MAX、COUNTなどの集計(集合)関数、定数しか指定できません。

MySQLの場合は、エラーとはならず、c1でグループ化することで、「c2とc3の値も一意になるなら指定してよい。そうでないなら、結果は保証しない」という仕様になっています。


MySQL :: MySQL 4.1 リファレンスマニュアル :: 6.3.7.3 非表示のフィールドに対する GROUP BY

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません