如何编写SQL查询大于最早创建记录对应ID的所有ID
SQL查询解决方案
关于MIN函数对日期格式的支持
MIN函数完全支持2017-08-23格式的日期取值,只要你的created_at字段是DATE、DATETIME等合法日期类型,就可以正常计算出表中最早的创建日期。
原有SQL的问题
你提供的两段SQL均存在语法错误,无法正常执行:
- 第一段SQL重复使用
WHERE关键字,且未对created_at设置逻辑判断条件 - 第二段SQL将聚合函数
MIN(c.created_at)放在GROUP BY子句中,不符合SQL语法要求,GROUP BY后仅可填写用于分组的维度字段,不可直接使用聚合函数
可行查询方案
方案1:子查询实现(兼容所有SQL数据库)
如果ID为自增主键,和created_at时间正相关(创建时间越晚ID越大),可以直接用以下语句,只要创建时间晚于最早创建时间的ID都会被查询出来:
SELECT casesoffensesid FROM casesoffenses WHERE created_at > (SELECT MIN(created_at) FROM casesoffenses);
如果存在最早创建时间对应多条记录的场景,需要获取比所有最早创建记录的ID都大的ID,可以用以下写法:
SELECT casesoffensesid FROM casesoffenses WHERE casesoffensesid > ( SELECT MAX(casesoffensesid) FROM casesoffenses WHERE created_at = (SELECT MIN(created_at) FROM casesoffenses) );
方案2:窗口函数实现(适配MySQL 8.0+、PostgreSQL、SQL Server等支持窗口函数的数据库)
WITH ranked_records AS ( SELECT casesoffensesid, DENSE_RANK() OVER(ORDER BY created_at ASC) AS time_rank FROM casesoffenses ) SELECT c.casesoffensesid FROM casesoffenses c WHERE c.casesoffensesid > (SELECT MAX(casesoffensesid) FROM ranked_records WHERE time_rank = 1);
内容的提问来源于stack exchange,提问作者jt4ever
相关产品推荐
相关产品推荐

