- ベストアンサー
MySQLのデータ取得方法について
- MySQLのテーブルから条件に合うデータを取得する方法について教えてください。
- テーブルの特定の列をまとめて取得し、並び順を指定する方法を教えてください。
- 複数のテーブルのデータを結合して取得する方法について教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ちょっと微妙だけど・・・ 今回の例だとこんな感じ SELECT a1.`type_id`,`member_id`,`date`,b.`name` FROM table_a AS a1 inner join table_b as b on a1.`type_id`=b.`type_id` having ( SELECT COUNT(*) +1 FROM table_a AS a2 WHERE 1 AND a2.`date` < a1.`date` AND a2.`type_id`= a1.`type_id` )<=3 order by `date` asc 今日以降のデータだけをとるなら SELECT a1.`type_id`,`member_id`,`date`,b.`name` FROM table_a AS a1 inner join table_b as b on a1.`type_id`=b.`type_id` having ( SELECT COUNT(*) +1 FROM table_a AS a2 WHERE 1 AND a2.`date` < a1.`date` AND a2.`type_id`= a1.`type_id` )<=3 and a1.`date`>curdate() order by `date` asc
その他の回答 (2)
- mooushi
- ベストアンサー率0% (0/2)
これはいかがですか。 select a.type_id,a.member_id,a.date,b.name, (SELECT count(*) FROM tableA c WHERE c.date<a.date and c.type_id=a.type_id)+1 as rank from tableA a, tableB b where a.type_id=b.type_id having rank<=3 order by a.type_id desc, rank asc ;
お礼
ご回答ありがとうございます
- yambejp
- ベストアンサー率51% (3827/7415)
ロジックがわからない >1.type_idでまとめたものを3件ずつ取得 type_id=4の場合、なぜmember_id が51,49,50の順番で選ばれるの? member_id順でも、date順でもないですよね? (date='2012-5-22'が選ばれない理由がわからない) >2.type_idのまとめた三件がdateの直近順 直近ってなんですか? 今現在の日付に一番近い日付ですか?それとも日付が若い順ですか? 同等の日付があった場合どちらがどう優先されるのですか?
お礼
ご回答ありがとうございます。
補足
>date='2012-5-22'が選ばれない理由がわからない すみません…これは単純に間違いですね…21, 22, 23となるのが正しいです。 >直近ってなんですか? こちらもすみません、正しくは今現在に一番近い日付です。 そして出来れば過去のものは省きたいです。 (そう考えるとtype_id=4は全て省かれる形になると思います。) >同等の日付があった場合どちらがどう優先されるのですか? member_idの若い順にしたいです。 すみませんが…どうぞよろしくお願いいたします。
お礼
遅くなりました。 申し訳ありません。 ありがとうございました。