
SQL 如何实现“去重后取前 N 条”且保持原顺序
ORDER BY 后不能直接用 DISTINCT,因语义冲突且标准不支持;应使用 ROW_NUMBER() 窗口函数按确定字段(如 id)去重保序,或用子查询取 MIN(id),避免 GROUP BY 隐式字段陷阱。 ORDER BY 后用...


ORDER BY 后不能直接用 DISTINCT,因语义冲突且标准不支持;应使用 ROW_NUMBER() 窗口函数按确定字段(如 id)去重保序,或用子查询取 MIN(id),避免 GROUP BY 隐式字段陷阱。 ORDER BY 后用...

ROW_NUMBER()是最通用可控的Top-N写法,需确保PARTITION BY与ORDER BY列有联合索引;MySQL 5.7-需子查询(性能差);PostgreSQL可用DISTINCT ON(Top-1极速)或LATERAL(大...

核心思路是用ROW_NUMBER()生成行号,以“登录日期-行号”作为连续段分组依据;需确保日期为DATE类型、联合去重,并注意窗口排序方向以支持倒推连续天数。 用 ROW_NUMBER() 配合日期差计算连续段 核心思路是:对用户登录记录...

软删除字段设计是通过添加deleted标志位(0为正常、1为逻辑删除)实现数据标记而非物理删除,需建索引、默认值设为0、所有查询/关联/更新操作显式过滤deleted=0,视图或ORM可封装但无法替代手动条件。 什么是软删除字段设计 软删除...

索引失效的五大主因:①对索引列使用函数或表达式;②LIKE以%开头;③隐式类型转换;④联合索引未遵循最左前缀原则;⑤统计信息陈旧、选择性差或返回行数过多。 WHERE 子句中对索引列使用函数或表达式 只要在 WHERE 条件里对索引列做了计...

幻读在READ COMMITTED下确实会发生,因该级别不锁定范围,其他事务插入并提交新行后,当前事务再次查询可能看到新增记录;InnoDB的REPEATABLE READ通过Next-Key Lock可避免多数幻读,但依赖索引且不覆盖所有...

SQL Server的MERGE必须同时包含WHEN MATCHED和WHEN NOT MATCHED分支,否则报错;Oracle则允许省略任一分支。两者在参数占位符、NULL处理、USING语法及索引要求上存在显著差异,跨库移植需方言适配...

JSON_ARRAYAGG 避免 NULL 导致结果为 NULL:用 FILTER (WHERE col IS NOT NULL) 过滤,或 COALESCE(JSON_ARRAYAGG(col), ‘[]’::js...

MySQL默认禁用LOAD DATA LOCAL INFILE,因其允许服务端向客户端发起本地文件读取请求,存在SQL注入导致敏感文件泄露的风险;需同时禁用客户端–local-infile=0和服务端local_infile=O...

子查询在驱动表极小、被关联字段有索引、仅需布尔判断时比JOIN快;典型场景为权限校验、白名单过滤等;NOT EXISTS可高效替代LEFT JOIN+IS NULL,IN子查询适用于结果集可控且无需关联表数据的情况。 什么时候子查询确实比 ...