如何编写SQL查询根据各水果对应最早日期时间筛选所属分类
SQL按水果最早时间筛选对应分类的实现方案
方案1:窗口函数实现(推荐,适配MySQL8+、PostgreSQL、SQL Server等主流新版数据库)
使用ROW_NUMBER()窗口函数对同种类水果按时间升序排序,取排序第一的记录即可:
WITH ranked_food AS ( SELECT Food, category, Datetime, ROW_NUMBER() OVER (PARTITION BY Food ORDER BY Datetime ASC) AS rn FROM 你的表名 ) SELECT Food, category, Datetime FROM ranked_food WHERE rn = 1;
针对你提供的样例数据,执行后返回结果如下:
| Food | category | Datetime |
|---|---|---|
| Apple | morning | 2021-10-06 00:00:00 |
| Dates | Brunch | 2021-10-06 10:00:00 |
方案2:子查询关联实现(适配不支持窗口函数的旧版数据库,如MySQL5.x)
先通过分组查询拿到每种水果的最早时间,再关联原表匹配对应分类:
SELECT t.Food, t.category, t.Datetime FROM 你的表名 t INNER JOIN ( SELECT Food, MIN(Datetime) AS min_datetime FROM 你的表名 GROUP BY Food ) t_min ON t.Food = t_min.Food AND t.Datetime = t_min.min_datetime;
注意:如果同一种水果存在多条完全相同的最早时间记录,该方案会返回所有匹配的记录,如有去重需求可额外添加DISTINCT关键字或按业务规则调整筛选逻辑。
内容的提问来源于stack exchange,提问作者AKK
相关产品推荐
相关产品推荐

