我尝试编写一个 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 替换了发送状态。