説明
私は、クライアントがドキュメント (契約書) を顧客に送信するプロジェクトに取り組んでいます。これらのドキュメントは、送受信される際に「イベント」を数回通過します (例: 準備、クライアントへの送信、クライアントからの改訂の受信、クライアントによる署名など)。特定の会社 (companyID 123456) について、各ドキュメントの最新のイベントを取得しようとしています。したがって、以下のクエリの例では、たとえば 5 つの異なるドキュメントが返され、それぞれに 4 つの異なるイベントが含まれている可能性があります。結果の例では、1 つのドキュメント (documentId 6789) に単純化しています。
以下の結果の例を考えると、3 行目が得られると思います。すべての行は 1 つのドキュメント用であり、その行には最新の日付が含まれています。ただし、以下に示すように、4 つ取得します。
documentID でグループ化すると、正しい日付が得られますが、イベントとイベント ID の値が正しくありません (転置されます)。私が成功した唯一の方法は、Select ステートメントの各値を Max() 関数でラップすることです。これを行うと、適切なイベントで必要な行が 1 つ取得されます。ただし、ドキュメントIDなどは間違っています。もちろん、一致するIDではなく、最大IDが返されるためです。
必要な結果が得られるように、誰かがこのクエリを調整するのを手伝ってくれませんか? 前もって感謝します!
注: この「解決策」はこちらで見つかりましたが、私が行っていることに直接当てはまるとは思いません: 列の最大値を持つ行を取得します
クエリ
SELECT e.eventID, e.イベント、 de.documentEventID、 de.documentID、 Max(de.eventDate) AS eventDate, sd.companyID、 FROM siteDocuments sd LEFT JOIN ドキュメント d ON d.documentID = sd.documentID LEFT JOIN documentTypes dt ON dt.documentTypeID = d.documentTypeID LEFT JOIN documentEvents de ON de.documentID = sd.documentID LEFT JOIN イベント e ON e.eventID = de.eventID WHERE sd.companyID = 123456 GROUP BY e.eventID
EXAMPLE RESULTS
-----------------------
EventId --- Event Doc --- EventId --- documentId --- eventDate
16 -------- FakeEventA -- 135791 ------ 6789 ------- 2012-04-11 08:35:54
32 -------- FakeEventB -- 726351 ------ 6789 ------- 2012-04-11 08:56:02
24 -------- FakeEventC -- 987236 ------ 6789 ------- 2012-05-09 16:48:57 <======
81 -------- FakeEventD -- 982378 ------ 6789 ------- 2012-04-20 14:06:19
(フォーマットを強制するためにダッシュを入れました)