sql 取最后一条记录

说白了,在SQL Server中使用TOP比LIMIT查询最后一条记录更可靠,但是两种方法背后的逻辑是不同的。

先用TOP比较简单。
去年我们运行电商后台系统的时候,可以直接使用TOP 1 FROMordersORDERBYidDESC。
当时表进出的数据大概有3 000条,跑得很快。
但请注意,TOP必须与ORDER BY结合使用,否则可能会抽出随机记录——很多人不注意这一点,说实话还挺混乱的。
还有一点,如果需要跳过前面的很多项,然后取最后一项,比如TOP 1 OFFSET 1 00 ROWS FROM (SELECT FROMorders ORDER BY id DESC) AS子查询,这种写法在去年的一个报表项目中就差点被卡住了,因为OFFSET是SQL Server中的T-SQL扩展,而不是标准SQL。

后来我发现LIMIT具有更广泛的兼容性,但是有一个细节非常关键。
例如,SELECT FROM order ORDER BY id DESC LIMIT 1 在 SQL Server 中会导致错误,因为它是 MySQL 语法。
正确的姿势是切换到OFFSET...ROWS FETCH FIRST...ROWS ONLY。
我去年迁移Oracle数据库的时候就踩过这个坑。
另一个细节是,当表中有NULL值时,ORDER BY id DESC LIMIT 1 可能会提取NULL,但TOP 1 通常会根据定义选择最大的非NULL值。
这需要测试和确认。

一开始以为LIMIT更高级,后来发现如果团队里有人使用SQL Server主流开发环境,坚持用TOP会省去很多麻烦,毕竟它直接支持。
等等,还有一件事,别忘了带上 ORDER BY。
去年,一名实习生在编写 SELECT TOP 1 FROM users 时报告错误。
由于系统默认按主键升序排序,因此选择了第一个用户。

建议先确定团队环境,再选择方案。
您认为哪一款更划算?

sql 查询 大于 并且距离 当前日期 最近的一条记录

SQL服务器: sql 选择 从表中 WHERE t.date = (SELECT MIN(日期) 来自表 t1 哪里 t1 .date >= GETDATE());
甲骨文: sql 选择 从表中 WHERE RQ IN (选择最小值 (RQ) 从表中 其中 RQ > 系统日期);
添加列: sql ALTER TABLE 表名 ADD 列名_列_类型 [DEFAULT_value_default];
删除列: sql ALTER TABLE - 表名 DROP COLUMN - 列名;
添加主键: sql ALTER TABLE - 表名 ADD PRIMARY KEY (col);
这些语句在各自的数据库系统中执行。