グループ化したそれぞれのグループの中で
一番新しいレコードをそのまま取得したいということでしょうか?
自己結合、というものを使用すればうまくいくかと思います。
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
状況が飲み込めませんが、こんな感じのことがやりたいのでしょうか。
もう少し具体的に書かれたほうが求める答に近づけそうです。
(最低でも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がグループ内である程度かぶらないという条件付きになります。
テストせず適当に描いたので動かないかもしれませんが、ニュアンス的なヒントになれば・・・。
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