2016-06-28 7 views
2

私は2つのテーブルjobs, notesを持っています。MySqlはソートをソートしますか?

status='lost'のジョブのリストを、そのジョブの最新のメモ(ノートが作成された日付に基づいて)のと一緒に出力したいとします。私は出力が与えられた仕事のための最新のノートを表示するだろうと思っているだろう

select jobs.id, jobs.name, jobs.status 
inner join notes on jobs.id=notes.jobId 
where jobs.status='lost' 
group by jobs.id 
order by notes.createDate DESC 

は、ここに私のクエリです。しかし、それはその仕事のための最初のメモを示しています。私は何が起こるかを見るために、ソートをDESCからASCに変更しました。出力も同じです。

次に、メインセレクト内のノートからセレクトを入れようとしましたが、ハングしました。

これは簡単にする必要がありますが、私はそれは確かです...私は何が欠けているのですか?

+1

実際には、任意の(不確定)の結果を返します。あなたはこのトピックを全章で説明しているマニュアルがありません。 – Strawberry

+1

マニュアルページ:http://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html – axiac

+0

...あなたに役立つ同様の質問への回答:http:// stackoverflow.com/a/28090544/4265352 – axiac

答えて

0

これを解決する方法はたくさんありますが、サブクエリを使用することもできます。

select jobs.id, jobs.name, jobs.status 
(select noteField from notes on jobs.id=notes.jobId order by createDate desc limit 1) note 
where jobs.status='lost' 
0

私は同様のボートにいるとき、私は参加にサブクエリを使用することに頼ってきました:

select jobs.id, jobs.name, jobs.status 
from jobs 
inner join notes on jobs.id = notes.jobId 
    and notes.createDate = (select max(notes.createDate) 
          from notes 
          where jobs.id = notes.createDate 
          group by notes.jobId) 
where jobs.status='lost' 
group by jobs.id 
order by notes.createDate DESC 
関連する問題