可用版本:Dev (3.21) | 最新 (3.20) | 3.19 | 3.18 | 3.17 | 3.16 | 3.15 | 3.14 | 3.13 | 3.12 | 3.11

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.WindowDefinitionorg.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

反馈

您对此页面有任何反馈吗? 我们很乐意听到!

The jOOQ Logo