1

各グループの最後のレコードを見つけるために 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 に置き換えたためです。

4

2 に答える 2

1

私は次のことをします:

SELECT ee.*
FROM email_errors as ee
CROSS JOIN
(
    SELECT ee.Group as grp, MAX(ee.id) AS max_id
    FROM email_errors as ee
    CROSS JOIN
    (
        SELECT Group as grp, MAX(date_t) AS max_date
          FROM email_errors
          WHERE status <> 0
          GROUP BY Group
    ) aux
    WHERE ee.Group = aux.grp
    AND ee.date_t = aux.max_date
    GROUP BY ee.Group
) outer_aux
WHERE ee.Group = outer_aux.grp
AND ee.id = outer_aux.max_id
于 2013-11-07T15:35:41.453 に答える