summaryrefslogtreecommitdiff
path: root/doc/src/sgml/ref/select.sgml
diff options
context:
space:
mode:
Diffstat (limited to 'doc/src/sgml/ref/select.sgml')
-rw-r--r--doc/src/sgml/ref/select.sgml60
1 files changed, 45 insertions, 15 deletions
diff --git a/doc/src/sgml/ref/select.sgml b/doc/src/sgml/ref/select.sgml
index 3a4e718fbf..ba8bff0e52 100644
--- a/doc/src/sgml/ref/select.sgml
+++ b/doc/src/sgml/ref/select.sgml
@@ -1,5 +1,5 @@
<!--
-$PostgreSQL: pgsql/doc/src/sgml/ref/select.sgml,v 1.114 2008/12/29 18:23:53 tgl Exp $
+$PostgreSQL: pgsql/doc/src/sgml/ref/select.sgml,v 1.115 2008/12/31 00:08:35 tgl Exp $
PostgreSQL documentation
-->
@@ -583,7 +583,21 @@ WINDOW <replaceable class="parameter">window_name</replaceable> AS ( <replaceabl
[ <replaceable class="parameter">existing_window_name</replaceable> ]
[ PARTITION BY <replaceable class="parameter">expression</replaceable> [, ...] ]
[ ORDER BY <replaceable class="parameter">expression</replaceable> [ ASC | DESC | USING <replaceable class="parameter">operator</replaceable> ] [ NULLS { FIRST | LAST } ] [, ...] ]
+[ <replaceable class="parameter">framing_clause</replaceable> ]
</synopsis>
+ </para>
+
+ <para>
+ If an <replaceable class="parameter">existing_window_name</replaceable>
+ is specified it must refer to an earlier entry in the <literal>WINDOW</>
+ list; the new window copies its partitioning clause from that entry,
+ as well as its ordering clause if any. In this case the new window cannot
+ specify its own <literal>PARTITION BY</> clause, and it can specify
+ <literal>ORDER BY</> only if the copied window does not have one.
+ The framing clause is never copied from the existing window.
+ </para>
+
+ <para>
The elements of the <literal>PARTITION BY</> list are interpreted in
the same fashion as elements of a
<xref linkend="sql-groupby" endterm="sql-groupby-title">, and
@@ -597,12 +611,29 @@ WINDOW <replaceable class="parameter">window_name</replaceable> AS ( <replaceabl
</para>
<para>
- If an <replaceable class="parameter">existing_window_name</replaceable>
- is specified it must refer to an earlier entry in the <literal>WINDOW</>
- list; the new window copies its partitioning clause from that entry,
- as well as its ordering clause if any. In this case the new window cannot
- specify its own <literal>PARTITION BY</> clause, and it can specify
- <literal>ORDER BY</> only if the copied window does not have one.
+ The optional <replaceable class="parameter">framing_clause</> defines
+ the <firstterm>window frame</> for window functions that depend on the
+ frame (not all do). It can be one of
+<synopsis>
+RANGE UNBOUNDED PRECEDING
+RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
+RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
+ROWS UNBOUNDED PRECEDING
+ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
+ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
+</synopsis>
+ The first two are equivalent and are also the default: they set the
+ frame to be all rows from the partition start up through the current row's
+ last peer in the <literal>ORDER BY</> ordering (which means all rows if
+ there is no <literal>ORDER BY</>). The options
+ <literal>RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING</> and
+ <literal>ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING</>
+ are also equivalent: they always select all rows in the partition.
+ Lastly, <literal>ROWS UNBOUNDED PRECEDING</> or its verbose equivalent
+ <literal>ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW</> select
+ all rows up through the current row (regardless of duplicates).
+ Beware that this option can produce implementation-dependent results
+ if the <literal>ORDER BY</> ordering does not order the rows uniquely.
</para>
<para>
@@ -623,8 +654,9 @@ WINDOW <replaceable class="parameter">window_name</replaceable> AS ( <replaceabl
<para>
Window functions are described in detail in
- <xref linkend="tutorial-window"> and
- <xref linkend="syntax-window-functions">.
+ <xref linkend="tutorial-window">,
+ <xref linkend="syntax-window-functions">, and
+ <xref linkend="queries-window">.
</para>
</refsect2>
@@ -1453,12 +1485,10 @@ SELECT distributors.* WHERE distributors.name = 'Westward';
<title><literal>WINDOW</literal> Clause Restrictions</title>
<para>
- The SQL standard provides for an optional <quote>framing clause</>,
- introduced by the key word <literal>RANGE</> or <literal>ROWS</>,
- in window definitions. <productname>PostgreSQL</productname> does
- not yet implement framing clauses, and always follows the
- default framing behavior, which is equivalent to the framing clause
- <literal>RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW</>.
+ The SQL standard provides additional options for the window
+ <replaceable class="parameter">framing_clause</>.
+ <productname>PostgreSQL</productname> currently supports only the
+ options listed above.
</para>
</refsect2>