mysql - 根据某些标准检索每个组的最后一条记录

标签 mysql sql

<分区>

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

最佳答案

我会执行以下操作:

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

关于mysql - 根据某些标准检索每个组的最后一条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19839395/

相关文章:

php - Lumen 5.6 迁移错误指定的 key 太长最大 key 长度为 767 字节

php - 仅从 MySQL 数据库中检索 8 个或更少字符以 "ing"结尾的单词

php - 按类别过滤时Mysql计数慢

SQL 查询 - 将 NULL 结果添加到 SELECT 查询

php - 用户自定义sql查询的表单入口

sql - sqlite3选择同时引用另一列的列

MySQL:复杂的 GROUP BY 查询

mysql - 尝试处理数据库登录表单中的错误时结果不同

sql - 在 MySQL 语句中使用 datediff

PHP 查询还显示 ID 75 的结果