首页 > 解决方案 > 如果条件为真,获取 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

标签: sql

解决方案


我假设您真的想要有关该事件的完整信息。如果是这样,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.


推荐阅读