1

私はそれらの2つのテーブルを持っています:

表 a:
--- ID --- Name ---
表 b:
--- ID --- ID_of_a --- Date ---

table aここで、行をDate(desc) のtable b最新の日付で並べ替えたいと思います。例: Table aID「1」と「2」の行があります。
Table b次のような行があります: {ID, ID_of_a, Date} {1, 1, "2013-06-30"}, {2, 1, "2013-07-01" }, {3, 2, "2013-07- 02" }
テーブル a の ID の正しい順序は次のようになります: 1 --- 2
クエリ:

SELECT DISTINCT a.ID, a.Name FROM a, b WHERE a.ID=b.ID_of_a ORDER BY b.Date desc


しかし、これは時々うまくいきません。

4

2 に答える 2

2

テーブル間に 1 対 1 の関係があると仮定します。

select a.*
from a left outer join
     b
     on a.id = b.id
order by b.date desc

bfor eachに複数の行がある場合はa、次のものが必要ですgroup by

select a.*
from a left outer join
     b
     on a.id = b.id
group by a.id
order by max(b.date) desc
于 2013-07-02T15:14:57.260 に答える
0

どうですか

select a.name,a.id from a join (select id_of_a as id_a,max(dt) as max_dt from b group by id_of_a order by max_dt desc) e on e.id_a=a.id

mysql> select * from a;
+----+------+
| id | name |
+----+------+
|  1 | a    |
|  2 | b    |
+----+------+
2 rows in set (0.00 sec)

mysql> select * from b;
+----+---------+------------+
| id | id_of_a | dt         |
+----+---------+------------+
|  1 |       1 | 2013-06-20 |
|  2 |       2 | 2013-07-01 |
|  3 |       1 | 2013-07-02 |
+----+---------+------------+
3 rows in set (0.00 sec)

mysql> select a.name,a.id from a join (select id_of_a as id_a,max(dt) as max_dt from b group by id_of_a order by max_dt desc) e on e.id_a=a.id;
+------+----+
| name | id |
+------+----+
| a    |  1 |
| b    |  2 |
+------+----+
2 rows in set (0.00 sec)

基本的には、最初にそれぞれの最大日付を選択しid_of_aてから結合しますa

より効率的に実行するために書き直すことができると思います

于 2013-07-02T15:36:31.103 に答える