WINDOW子句
适用于 ✅ 开源版 ✅ 专业版 ✅ 企业版
SQL:2003 标准支持 WINDOW
子句,允许为 SELECT 子句 和 ORDER BY 子句 中的重用指定 WINDOW
框架。
SELECT LAG(first_name, 1) OVER w "prev", first_name, LEAD(first_name, 1) OVER w "next" FROM author WINDOW w AS (ORDER first_name) ORDER BY first_name DESC
WindowDefinition w = name("w").as( orderBy(AUTHOR.FIRST_NAME)); create.select( lag(AUTHOR.FIRST_NAME, 1).over(w).as("prev"), AUTHOR.FIRST_NAME, lead(AUTHOR.FIRST_NAME, 1).over(w).as("next")) .from(AUTHOR) .window(w) .orderBy(AUTHOR.FIRST_NAME.desc()) .fetch();
请注意,为了创建这样的窗口定义,我们需要首先使用 DSL.name()
创建一个 名称引用。
即使只有 PostgreSQL 和 Sybase SQL Anywhere 本身支持这个强大的功能,jOOQ 也可以通过扩展您传递给 window()
方法的任何 org.jooq.WindowDefinition
和 org.jooq.WindowSpecification
类型来模拟它 - 如果数据库完全支持窗口函数。
有关 窗口函数 和 WINDOW
子句的更多信息,请访问我们的博客:https://blog.jooq.org/probably-the-coolest-sql-feature-window-functions/
方言支持
此示例使用 jOOQ
select(rowNumber().over("w")).from(AUTHOR).window(name("w").as(orderBy(AUTHOR.ID)))
翻译成以下特定方言的表达式
Aurora Postgres, BigQuery, ClickHouse, CockroachDB, Databricks, DuckDB, Exasol, Firebird, H2, MySQL, Oracle, Postgres, SQLServer, SQLite, Sybase, Trino, YugabyteDB
SELECT row_number() OVER w FROM AUTHOR WINDOW w AS (ORDER BY AUTHOR.ID)
DB2, Hana, Informix, MariaDB, MemSQL, SQLDataWarehouse, Snowflake, Teradata, Vertica
SELECT row_number() OVER (ORDER BY AUTHOR.ID) FROM AUTHOR
ASE, Access, Aurora MySQL, Derby, HSQLDB, Redshift
/* UNSUPPORTED */
使用 jOOQ 3.21 生成。早期 jOOQ 版本的支持可能有所不同。 在我们的网站上翻译您自己的 SQL
反馈
您对此页面有任何反馈吗? 我们很乐意听到!