SQLite技术问询:获取同类重复事件的最早记录
解决events表重复标题取最早记录的查询问题
针对你的需求,这里提供两种可行的SQL查询方案:
方案一:使用窗口函数(推荐,语法简洁高效)
SELECT id, title, event_date, url FROM ( SELECT id, title, event_date, url, -- 按标题分组,每组内按事件日期升序编号 ROW_NUMBER() OVER (PARTITION BY title ORDER BY event_date ASC) AS rn FROM events WHERE event_date > DATE() ) AS ranked_events -- 取每组内编号为1的记录(即该标题下最早的有效事件) WHERE rn = 1;
核心是用ROW_NUMBER()窗口函数给每个标题下的记录按日期排序,直接筛选出最早的那条,不需要复杂的关联操作。
方案二:关联子查询(兼容不支持窗口函数的旧版本数据库)
SELECT e.id, e.title, e.event_date, e.url FROM events e INNER JOIN ( -- 先找出每个标题下符合条件的最早日期 SELECT title, MIN(event_date) AS min_event_date FROM events WHERE event_date > DATE() GROUP BY title ) AS min_dates -- 通过标题和对应最早日期关联,获取完整记录 ON e.title = min_dates.title AND e.event_date = min_dates.min_event_date WHERE e.event_date > DATE();
子查询先聚合每个标题的最小有效日期,再和原表关联匹配,得到对应日期的完整记录,避开了直接GROUP BY无法获取非聚合字段的问题。
内容的提问来源于stack exchange,提问作者StripyTiger
相关产品推荐
相关产品推荐

