mysqlにて下記のようなテーブルから
tableA
| no | dat | to_user | from_user |
|---|---|---|---|
| 10 | 2018-12-31 12:10:00 | Aさん | Bさん |
| 9 | 2018-12-30 12:10:00 | Bさん | Aさん |
| 8 | 2018-12-30 11:10:00 | Aさん | Bさん |
| 7 | 2018-12-21 12:10:00 | Cさん | Aさん |
| 6 | 2018-12-11 12:10:00 | Dさん | Aさん |
| 5 | 2018-12-01 12:10:00 | Cさん | Bさん |
| 4 | 2018-11-20 12:10:00 | Aさん | Bさん |
| 3 | 2018-11-10 12:10:00 | Aさん | Cさん |
| 2 | 2018-11-01 12:10:00 | Aさん | Dさん |
| 1 | 2018-10-21 12:10:00 | Cさん | Aさん |
抽出条件として
①Aさんがto_userまたはfrom_userに含まれる
②相手(Aさんでない方のカラム)の重複は除く
③それぞれdatの最新のもの
下記のようなデータを抽出したい
| no | dat | to_user | from_user |
|---|---|---|---|
| 10 | 2018-12-31 12:10:00 | Aさん | Bさん |
| 7 | 2018-12-21 12:10:00 | Cさん | Aさん |
| 6 | 2018-12-11 12:10:00 | Dさん | Aさん |
試したquery
mysql
1SELECT v1.* FROM 2(SELECT *,to_user as myno FROM tableA WHERE no IN( SELECT MAX(no) FROM tableA WHERE from_user='Aさん' GROUP BY to_user) 3 UNION ALL SELECT *,from_user as myno FROM tableA WHERE no IN( SELECT MAX(no) FROM tableA WHERE to_user='Aさん' GROUP BY from_user )) AS v1 4GROUP bY myno 5ORDER BY v1.dat DESC
としたのですが、①②を満たすデータは取れるのですが③datが最新のものの抽出ができません。
「mysql group 最大値」と検索した結果にヒントはあると思うのですが
UNION で連結していることで複雑になりわからなかったので、質問しました。
mac
chrome
php7.X
mysql5.7
回答3件
あなたの回答
tips
プレビュー
2019/01/10 15:43
2019/01/10 16:03
2019/01/10 16:07