首页 > 解决方案 > 如何从mysql中的表中跳过行

问题描述

我有一个包含以下数据的表,我想跳过第 3 行,只想获取 OPEN 状态一次,我正在使用下面的查询,但它也跳过了第 5 行。

    SELECT t.*
FROM emailEvent t
  JOIN 
    ( SELECT MIN(id) AS minid
      FROM emailEvent WHERE email_id = 3
      GROUP BY status
    ) AS grp
    ON grp.minid = t.id
WHERE (t.email_id = 3)

我想出了这个作为解决方案,但不确定是否还有其他最佳解决方案

 SELECT t.*
FROM emailEvent t
WHERE t.status != "Open" and t.email_id = 3
UNION
(
SELECT et.*
FROM emailEvent et
WHERE et.status = "Open" and et.email_id = 3
ORDER BY et.createdAt DESC LIMIT 1
)

在此处输入图像描述

我希望结果看起来像这样 在此处输入图像描述

标签: mysqlsqlgroup-bysubquerydistinct

解决方案


SELECT *
FROM
 (
   SELECT t.*, 
      min(id) over (partition by status) as min_id
   FROM emailEvent t
   WHERE (t.email_id = 3)   -- only email 3
 ) AS dt
WHERE id = min_id           -- only for 'Open' status
   OR status <> 'Open'

对于不支持Windowed Aggregates的旧版本:

select * 
from emailEvent
where email_id = 3
and 
  (
   e.status <> 'Open'
   or id in (select min(id)  -- only for 'Open' status
          from emailEvent 
          where status = 'Open'
          and email_id = 3)
  )

推荐阅读