sql - 如果条件为真,获取 MIN(),否则获取下一条 SQL
问题描述
我有一个名为“事件”的表,并想在“created_at”日期之前获取第一个条目。但是,如果第一个事件 (MIN(events.created_at)) 的标题包含“测试”,我想为该用户返回下一个事件(通过 created_at)。如果用户只有一个事件,只需返回那个事件。
有没有一种简单的方法可以通过查询来做到这一点?
这是我所能得到的;它通过 created_at 返回第一个事件
SELECT MIN(events.created_at) 'event_created_at', events.user_id, events.title, MIN(events.type) 'type'
FROM events
GROUP BY events.user_id
这是针对 SQL DBMS
解决方案
我假设您真的想要有关该事件的完整信息。如果是这样,GROUP BY
是错误的做法。
select e.*
from (select e.*,
row_number() over (partition by e.user_id
order by (case when e.title not like '%test%' then 1 else 2 end) desc,
e.created_at asc
) as seqnum
from events e
) e
where seqnum = 1;
当您想从组中选择行时,窗口函数通常是比group by
.
推荐阅读
- r - 模拟一个简单的线性模型
- python-3.x - Python3 Virtual env 无法将文件保存在与 virtualenv 不同的位置
- android - 错误:找不到:vectordrawable-animated-1.1.0
- elasticsearch - 如何使用 ILM 翻转来管理弹性映射更改?
- linux - Apache2 无法启动 Putty AWS Windows
- python - ModuleNotFoundError 即使模块出现在 pip3 列表中
- asp.net - Asp.net Web API MVC 无法加载包
- testing - 如何测试程序是否正确处理部分读取()和写入()?
- python - 如何提取包含所需字符串的行?
- javascript - 如何在键入选项的框下显示自动完成选项?