みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

mysql order by のNULLについて

mysql order by のNULLについて

テーブル tb1

memberid 2   2
cardid  1   1
name 田中  井岡
day 2016.4.10  2016.4.22
new  New NULL

ソース
SELECT memberid,cardid,max(name),max(day),max(new)
FROM tb1 WHERE memberid=2
GROUP BY cardid ORDER BY max(day) DESC LIMIT '.$limit.' OFFSET '.$offset;

すると max(new)の部分が Newと出てきます。
max(new)なのでNULLが出てくると思っていました。
NULLにしたいのですが
名前も井岡ではなく田中がでてきます
max(day)をオーダーしているので新しい日の情報が出てくると思っていましたが。。。。
何か SQLの書き方に問題があるのでしょうか それともこのテーブルの作りでは不可能なのでしょうか?

無知な私に
ご教授お願いいたします。

投稿日時 - 2016-04-22 21:01:07

QNo.9162400

すぐに回答ほしいです

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

例えばmemberid=1 cardid=1の組み合わせのすべてのデータから最新のdayを持った1件、memberid=1 cardid=2の組み合わせのすべてのデータから最新のdayを持った1件など、それぞれの組み合わせの最新が1件ずつ欲しいということですか?

SELECT * FROM (SELECT * FROM tb1 ORDER BY day DESC) tbl GROUP BY memberid,cardid

これはFROMの後にSELECTがまたありますね。()の中で日付が大きい順に並べ替えたテーブルを作り、それを「tbl」と命名してそのテーブルに対してグルーピングをかけています。

投稿日時 - 2016-04-22 22:00:44

お礼

できました!!
私の説明がわかりにくく申し訳ないです
しかし それをご理解していただき迅速に回答してくださって誠に
ありがとうございました。

投稿日時 - 2016-04-22 22:37:58

ANo.3

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

select * from tb1 where (cardid,day) in ( select cardid,max(day) from tb1 where memberid=2 group by cardid)

これでいかがですか?

投稿日時 - 2016-04-22 21:54:47

お礼

回答ありがとうございます。
無事解決いたしました。
これからもよろしくおねがいいたします。

投稿日時 - 2016-04-22 22:40:19

ANo.1

そのSQLで何を出したいのかがよくわからないのですが、一番新しいdayを持った1件のデータを取得したいのですか?

それなら下記ででませんか?
SELECT * FROM tb1 ORDER BY day DESC LIMIT 1

投稿日時 - 2016-04-22 21:22:21

お礼

早速の回答ありがとうございます!

ほかにもデータがはいっておりまして
memberid 5 cardid 1など
たくさん組み合わせがありまして
それらのグループ化した 最大のdayのデータを表示したい次第です。

投稿日時 - 2016-04-22 21:41:06