- ベストアンサー
MySQLデータ取り出しの方法とは?
- MySQLデータ取り出しに関する基本的な方法として、特定の条件に基づいてデータを抽出するクエリを使用します。
- 上記の例では、noとdateの2つの列があります。特定のnoに関連する最新のdateを取得するには、以下のクエリを使用します。
- 知り合いからは1件ずつ取り出すのは可能だがまとめては無理だと言われました。しかし、MySQLでは条件に基づいてデータを絞り込み、必要なデータのみを一度に取り出すことができます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> 仮にmesという列を追加して・・・の抜き出しは可能なのでしょうか? 相関サブクエリを使えば出来ます。 ただし、同じ no で最新の日付の行が複数有った場合は、複数取出されます。 例) ------------------------------------------- SELECT * FROM sample2 a where NOT EXISTS( SELECT * FROM sample2 b WHERE a.no = b.no AND a.date < b.date ); ----------------------------------------------- WHERE 句は、 no が同じで date がそれより大きい行が無い行という条件を表しています。
その他の回答 (2)
- root139
- ベストアンサー率60% (488/809)
no ごとに最も新しい日付の date を取得するということでよいでしょうか? GROUP BY 句で同一の no のレコードをまとめ、MAX で最も新しい日付を取得することが出来ます。 例) ----------------------------------------- SELECT no, MAX(date) FROM sample1 GROUP BY no; --------------------------------------------
お礼
回答有難うございます。 SQL文一回でnoごとのdateの最新日を抜き出すことが出来ました。^^
補足
仮にmesという列を追加して -------------------- |no| mes | date | -------------------- |1 |コメントA| 2011/1/25 | -------------------- |1 |コメントB| 2011/1/28 | |-------------------- |1 |コメントC| 2011/1/29 | |-------------------- |2 |コメントD| 2011/1/25 | |-------------------- |2 |コメントE| 2011/1/28 | |-------------------- 取り出したいデータ -------------------- |no| mes | date | -------------------- |1 |コメントC| 2011/1/29 | -------------------- |2 |コメントE| 2011/1/28 | |-------------------- の抜き出しは可能なのでしょうか? 先程のSQL文でいくと -------------------- |no| mes | date | -------------------- |1 |コメントA| 2011/1/29 | -------------------- |2 |コメントD| 2011/1/28 | |-------------------- コメントだけ古い状態のものになってしまいました。
- rukuku
- ベストアンサー率42% (401/933)
こんばんは 補足要求です。 MySQL単独での方法は私にも思いつきません。 PHPなどからMySQLに指示を出している場合には可能です。 実際に使っている環境(パソコン上なのかWeb上なのか、OSは何かなど)と教えてください。 また、 >noは動的(3,4,5・・・) 連番なのか、欠番があるのかなど、番号の付け方のルールも教えてください
お礼
回答有難うございます。 MySQLのみでいけるか、もうちょっと粘ってみようかと思います^^;
補足
長文にて失礼します。 補足です。 環境 --------------- PHP 5.2.8 Apache/2.2.11 MySQL 5.1.32-community Windows Vista Home Basic --------------- 2chのような掲示板を想像してみて下さい。 スレッドが立てられるとtb1のnoが連番で増えていきます。 tb1テーブル ---------- |no| thread | |---------- |1 |スレッドA| |---------- |2 |スレッドB| |---------- tb2テーブル -------------------- |no| mes | date | -------------------- |1 |コメントA| 2011/1/25 | -------------------- |1 |コメントB| 2011/1/28 | |-------------------- |1 |コメントC| 2011/1/29 | |-------------------- |2 |コメントD| 2011/1/25 | |-------------------- |2 |コメントE| 2011/1/28 | |-------------------- 取りあえずtb1は無視してローカル環境にてtb2だけで色々と試し select no,max(date) from tb2 group by no; と叩いたところ、 -------------- |no | date | -------------- |1 | 2011/1/29 | -------------- |2 | 2011/1/28 | ------------- と出たのですが、mesを加えると -------------------- |no| mes | date | -------------------- |1 |コメントA| 2011/1/29| -------------------- |2 |コメントD| 2011/1/28 | |-------------------- mesだけは古いままで終わってしまいました。^^; 出来れば1回のSQL文で出してmysql_fetch_array()を使用してwhile文で回そうかなと考えています。
お礼
回答有難う御座います。 「素晴らしい」以外の言葉が見つかりません。