私は正しい結果に耳を傾ける単一のMySQLクエリを生成することに私の頭を包み込むために戦っています。MySQLは、特定の値の最新の行を選択してください
私は以下のように構成されているテーブルを持っている:
workflow_status_history:
id reference status
1 308ffn3oneb Lead Received
2 308ffn3oneb Quoted
3 308ffn3oneb Invoiced
4 853442ec2fc Lead Received
あなたが見ることができるように、workflow_status_history
表は、当社のシステム上の各ワークフローのすべてのステータスの履歴を保持以前のステータスを新しいステータスに置き換えたり上書きしたりするのではなく、これは、詳細なレポート作成と監査に役立ちます。ワークフローの開始ステータスは常にLead Received
です。
問題は、しかし、私は最新またはのみステータスがLead Received
あるのですテーブルの各行のreference
フィールドを選択する必要があるということです。したがって、上記の例では、フィールド番号4
が返されますが、フィールド1
、2
および3
は、そのワークフロー参照の最新のステータスがInvoiced
であるため返されません。しかし、853442ec2fc
(フィールド番号4
)がLead Received
以外の新しいステータスを取得した場合、次回のクエリ実行時には返さないようにしてください。以下のように
私の現在のクエリは次のとおりです。
SELECT *, MAX(id) FROM workflow_status_history WHERE 'status' = 'Lead Received' GROUP BY reference LIMIT 20
このWHERE
節はそれがLead Received
ステータスを持つすべての行を返すことを保証しているため、当然のことながら、関係なく、望ましい結果を返しません。それが最新の状態であるか否かを判断する。したがって、テーブル内の最初の20個のワークフロー参照が常に返されます。
希望の結果を返すために正しいクエリを作成するにはどうすればよいですか?
ありがとうございました。
ステータスの変更ごとにタイムスタンプも保存していますか? – user2314737
はい私はそうです。私は年代順の参照としてIDフィールドを使用していますが。 – RookieSA