dポイントプレゼントキャンペーン実施中!

次のようなテーブルから重複する spuid の最新の udate に該当する no (またはレコード)を取得したいのですが、うまくいきません。

+----+------------+---------------------+
| id | spuno | udate |
+----+------------+---------------------+
| 1 | SPU07-0001 | 2007-08-23 08:46:59 |
| 2 | SPU07-0001 | 2007-08-23 08:46:59 |
| 3 | SPU07-0002 | 2007-08-23 08:41:30 |
| 4 | SPU07-0003 | 2007-08-23 08:41:30 |
| 5 | SPU07-0004 | 2007-08-23 08:46:59 |
| 6 | SPU07-0005 | 2007-08-23 08:47:54 |
| 7 | SPU07-0006 | 2007-08-23 08:41:30 |
| 8 | SPU07-0006 | 2007-08-23 08:41:30 |
| 9 | SPU07-0006 | 2007-08-23 08:41:30 |
| 10 | SPU07-0006 | 2007-08-23 08:41:30 |
| 11 | SPU07-0006 | 2007-08-23 08:41:30 |
| 12 | SPU07-0006 | 2007-08-23 08:41:30 |
| 13 | SPU07-0001 | 2007-08-23 08:50:14 |
| 14 | SPU07-0001 | 2007-08-23 08:50:55 |
| 15 | SPU07-0001 | 2007-08-23 12:21:49 |
| 16 | SPU07-0001 | 2007-08-23 12:24:01 |
+----+------------+---------------------+
試したこと
SELECT id,spuno,MAX(udate) AS udate FROM tbl_report GROUP BY spuno;
結果は以下のようにudate は最新ですが、 no が最初の番号になります。

+----+------------+---------------------+
| id | spuno | udate |
+----+------------+---------------------+
| 1 | SPU07-0001 | 2007-08-23 12:24:01 |
| 3 | SPU07-0002 | 2007-08-23 08:41:30 |
| 4 | SPU07-0003 | 2007-08-23 08:41:30 |
| 5 | SPU07-0004 | 2007-08-23 08:46:59 |
| 6 | SPU07-0005 | 2007-08-23 08:47:54 |
| 7 | SPU07-0006 | 2007-08-23 08:41:30 |
+----+------------+---------------------+
申し訳ありませんが、ご教示お願いします。

A 回答 (2件)

>SELECT id,spuno,MAX(udate) AS udate FROM tbl_report GROUP BY >spuno;


>結果は以下のようにudate は最新ですが、 no が最初の番号になりま
>す。

noとおっしゃっているのは フィールド名 idの事でしょうか?

spuno毎にグループ化し updateは最大値を取っていますが
id については記載がありません。DBやバージョンによって
異なるのですが
idも最大値でよいのであれば max(id)のように書きます。

idは最大値とは限らないのであれば 一旦 キーとなるものを
求めるSelect文を実行し 更に結合します。

例(DB環境を持っていませんので 検証していません)

SELECT T2.id,
T1.spuno,
T1.udate
FROM
(
SELECT spuno,MAX(udate) AS udate
FROM tbl_report
GROUP BY spuno)
AS T1
LEFT JOIN tbl_report T2
ON T1.spuno = T2.spuno and T1.udate = T2.udate
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
NO.1さんのところに書いたように自己解決いたしました。
お騒がせいたしました。

お礼日時:2007/08/30 10:54

よくみかける質問ですね。

この掲示板でもなんどか話題にあがっています。
キーワードがつけにくくヒットしにくいので攻めはしませんが・・。

とりあえずMySQLのバージョンによりやり方がまったくことなります。
補足が必要です。
    • good
    • 0
この回答へのお礼

申し訳ありません。
あせってて忘れていました。
CentOS5
- Apache/2.2.3
- MySQL 5.0.22
- PHP 5.1.6
- Smarty-2.6.14
でしたが、以下の式で自己解決いたしました。
select max(id) as id,spuno,max(udate) as udate from tbl_report group by spuno;
お騒がせいたしました。

お礼日時:2007/08/30 10:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す