• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:それぞれの最新データーを抜き出したい)

各phonenumberの最新データを抜き出す方法

このQ&Aのポイント
  • このSQL文では、各phonenumberごとの最新のデータを抜き出すことができます。
  • イメージ的には、各phonenumberに対して最新のデータのみを表示します。
  • これにより、データの重複を排除して最新の情報を把握することができます。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

SELECT id,phonenumber,status FROM テーブル名 T1 WHERE id=(SELECT MAX(id) FROM テーブル名 T2 WHERE T1.phonenumber=T2.phonenumber) です。

elkheart
質問者

補足

回答ありがとうございます。 テーブル名 T1とテーブル名 T2って言うのは、テーブルを2つ用意するってことですか? 素人なんで分かりません。 詳しく教えてください。 お願い致します。

その他の回答 (4)

回答No.5

今回の質問ではstatusも表示対象なので、少し厄介なSQLとなっています。 statusを表示しないのであれば次のようなSQLとなります。 SELECT MAX(id),phonenumber FROM テーブル名 GROUP BY phonenumber ORDER BY 1 このSQLのstatusを追加した場合、そのstatusは何を表示するのか未定となり、通常はエラーとなります。(ただし、MySQLの場合はエラーとならないようです) つまり、GROUP BY以下に無い列はMAX等の集計関数を使用しないと文法上おかしな事になります。 そこで最初のテーブルでstatusも含めて対象行を表示します。 WHERE以下が無い場合は、当然全て表示されてしますので、ここで同じphonenumberを持つ 「WHERE T1.phonenumber=T2.phonenumber」行で最大のidを持つ「MAX(id)」idに一致する「WHERE id=(...)」行のみを選択させます。

回答No.4

>テーブルを2つ用意するってことですか? T1とT2は同じテーブルです。T1とT2は別名で列名の先頭に付けてどちらのテーブルの列名かを区別します。 SELECTでテーブルの検索結果を表示しますが、同じphonenumberでidが一番大きな行を条件とするためT2で同じテーブルを使ってidが一番大きな値を検索する事で目的の結果が出せます。

elkheart
質問者

補足

ありがとうございます。 見事にできました!! でも何で抽出できるかは???です。 よろしければ詳しく教えてください。 >同じphonenumberでidが一番大きな行を条件とするためT2で同じテーブルを使ってidが一番大きな値を検索する事で目的の結果が出せます。 ここが特に?です。 素人にも分かるように教えてください。 お願いします。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

こういう書き方もありますね SELECT id,phonenumber,status FROM allingstatus WHERE (id,phonenumber) IN (SELECT MAX(id),phonenumber FROM allingstatus GROUP BY phonenumber)

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

横から失礼します。 T1とは、テーブル1の「別名(エイリアス)」です。 SQL文の記述を見やすくするためなどに用います。今回は AS を省略しますね。 SELECT テーブル1.id, テーブル1.phonenumber, テーブル1.status FROM テーブル1 (以下略) でもいいけど、記述誤りも生じるでしょうし。 また、「別名(エイリアス)」は、列名やテーブル名として使用することもあります。 副問い合わせする場合に用います。

elkheart
質問者

補足

回答ありがとうございます。 と言うことは、テーブル名が「callingstatus」としたら SELECT id,phonenumber,status FROM allingstatus T1 WHERE id=(SELECT MAX(id) FROM allingstatus T2 WHERE T1.phonenumber=T2.phonenumber) になるってことでしょうか?

関連するQ&A