mysql - 如何从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
)
解决方案
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)
)
推荐阅读
- php - 在使用多个数据库交互和电子邮件更新 cron 作业时遇到问题
- python - python selenium youtube like 按钮
- sql - 具有空值的多个字段的 SQL 连接
- javascript - 如何配置 Eslint 以忽略 Vue Cli 3 项目中的特定错误
- sql - 将位置参数更改为 HQL 中的命名参数
- java - Java - 如何在 Java 中解析 JSON 和 CSV 文件并将它们存储在 Neo4j 数据库中
- python - Python 的 Numpy 数组维度的问题
- javascript - JS - 如何生成一个长随机数?
- sql - 如何在 macos 上配置 sqlcmd 以使用 Windows 身份验证连接到 MSSQL
- c# - 实体框架中导航属性的属性总和