各グループの最後のレコードを見つけるために sql リクエストを作成しようとしましたが、これがテーブルのレイアウトです。
--------------------------------------
| id | Group | message | Status | date|
-------------------------------------
| 1 | A | msg1 | sent | dt |
-------------------------------------
| 2 | A | msg2 |deferred| dt2 |
-------------------------------------
| 3 | B | msg3 |deferred| dt |
-------------------------------------
| 4 | B | msg4 |deferred| dt |
-------------------------------------
| 5 | B | msg5 |Bounced | dt |
-------------------------------------
| 6 | C | msg6 |sent | dt |
-------------------------------------
| 7 | D | msg7 |deferred| dt |
-------------------------------------
| 8 | D | msg8 |deferred| dt |
-------------------------------------
| 9 | D | msg9 |sent | dt |
-------------------------------------
そして、私はこの出力を取得しようとします:
--------------------------------------
| id | Group | message | Status | date|
-------------------------------------
| 2 | A | msg2 |deferred| dt |
-------------------------------------
| 5 | B | msg5 |bounced | dt |
-------------------------------------
| 8 | D | msg8 |deferred| dt |
-------------------------------------
つまり、グループごとに、テーブルにある日付を使用して、最後の「延期」または「バウンス」メッセージが必要です。このリクエストを実行することから始めますが、必要な結果を得るためにそれを変更する方法がわかりません:
SELECT ee.Group, ee.message
FROM email_errors ee
LEFT JOIN email_errors ee2 ON ( ee.Group = ee2.Group
AND ee.id < ee2.id )
WHERE ee2.id IS NULL
AND ee2.status <>0
ee.status <> 0 に注意します。これは、実際のテーブルで 3 つの可能なステータス bu 0,1,2 を置き換え、送信済みステータスを 0 に置き換えたためです。