SQL SERVER的SELECT TOP n
是否有符合ANSI SQL标准的版本?
SQL SERVER的SELECT TOP n
是否有符合ANSI SQL标准的版本?
ANSI/ISO SQL:2003 引入了 windowing functions:
SELECT * FROM (
SELECT
ROW_NUMBER() OVER (ORDER BY age ASC) AS rownum,
person_id,
person_name,
age
FROM person
) AS foo
WHERE rownum <= 3
微软SQL Server 2005及更高版本支持此语法。 http://msdn.microsoft.com/en-us/library/ms189798(v=sql.90).aspx
ANSI/ISO SQL:2008引入了更简单的FETCH FIRST
语法,可能更类似于Microsoft/Sybase的TOP
语法:
SELECT person_id, person_name, age FROM person
FETCH FIRST 3 ROWS ONLY
Microsoft SQL Server 2012及更高版本支持该语法。 https://learn.microsoft.com/en-us/sql/t-sql/queries/select-order-by-clause-transact-sql?view=sql-server-2017#using-offset-and-fetch-to-limit-the-rows-returned
如果您仍在使用Microsoft SQL Server 2000,则应阅读我之前发布的有关执行“分页”风格查询的问题: Emulate MySQL LIMIT clause in Microsoft SQL Server 2000
为了提供更多上下文,SQL Server有以下TOP
语法:
[
TOP (expression) [PERCENT]
[ WITH TIES ]
]
相关的标准SQL等效语句如下:
FETCH FIRST expression ROWS ONLY
FETCH FIRST expression PERCENT ROWS ONLY
FETCH FIRST expression ROWS WITH TIES
ROWS ONLY
,在这种情况下,标准的SQL等效方法是进行过滤:-- PERCENT ROWS ONLY
percent_rank () OVER (ORDER BY ..) <= expression / 100
-- ROWS WITH TIES
rank () OVER (ORDER BY ..) <= expression
'LIMIT' 可以与亚马逊的 Athena 一起使用:
SELECT * FROM myTable LIMIT 3;
引用自athena
Amazon Athena是一个基于开源框架构建的无服务器交互式分析服务,支持开放表格和文件格式。Athena提供了一种简化、灵活的方式来分析存储在数据湖中的PB级数据。使用SQL或Python分析Amazon Simple Storage Service(S3)数据湖和25多个数据源,包括本地数据源或其他云系统。Athena基于开源Trino和Presto引擎以及Apache Spark框架构建,无需进行任何配置或设置。
Non-ANSI-SQL
命令发出警告?设置SQL兼容级别以实现ANSI
兼容性将是很好的选择。但据我所知,没有这样的选项。 - surfmuggleNon-ANSI-SQL
命令发出警告?设置sql compatibility level以实现ANSI
兼容性将是很好的选择。但据我了解,目前没有这样的选项。 - undefined