1

データベースに次のテーブルがあります

データベース テーブル

プロジェクトにはいくつかのステータス(待機中、作業中、完了、支払い済み) があり、プロジェクトは待機中から支払い済みまでのすべてのステータスを通過する必要があります。

プロジェクトを完全に追跡するために、各ステータスが保持されるため、プロジェクトのステータスがいつ変更されたかがわかります。

現在のステータス(より最近の "created_at" を持つもの)で検索フィルターを作成したいと思います。

正しい結果を得るためにいくつかのクエリを試しましたが、これで行き詰まっています。

私が持っている機能しないクエリは

select p.* from projects p
left join projects_status_projects psp on psp.project_id = p.id
where p.id in (select project_id from projects_status_projects 
      where project_status_id = XX group by project_id order by created_at desc)

多くの場合、このクエリは機能せず、注文を考慮せずに project_status_id XX のレコードを持つ各プロジェクトを返します。

どんなヒントでも大歓迎です!

ありがとう、
ベンジャミン

4

4 に答える 4

0

これを解決する1つの方法は次のとおりです。

select p.* from projects p
left join projects_status_projects psp on psp.project_id = p.id
where p.id in (select project_id from projects_status_projects 
      where project_status_id = XX and created_at = min(created_at) group by project_id)
于 2013-10-08T13:20:58.160 に答える