Re: Frames vs partitions: is SQL2008 completely insane? - Mailing list pgsql-hackers

From Bruce Momjian
Subject Re: Frames vs partitions: is SQL2008 completely insane?
Date
Msg-id 200901212356.n0LNusw17786@momjian.us
Whole thread Raw
In response to Frames vs partitions: is SQL2008 completely insane?  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: Frames vs partitions: is SQL2008 completely insane?  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-hackers
Tom Lane wrote:
> According to SQL2008 section 7.11 <window clause>, general rule 5, the
> default definition of window framing in a window that has an ordering
> clause but no framing (RANGE/ROWS) clause is that the window frame for
> a given row R runs from the first row of its partition through the last
> peer of R.
> 
> Section 6.10's general rules define the results of LEAD, LAG,
> FIRST_VALUE, LAST_VALUE, NTH_VALUE in terms of the rows available in the
> window frame of the current window, not its partition.
> 
> Meanwhile, section 6.10 <window function> syntax rule 6 says that
> LEAD/LAG must use a window that has an ordering clause and no
> framing clause.
> 
> This means that without an explicit framing clause, none of these
> functions can "look beyond" the last peer of the current row; and
> what's worse, LEAD/LAG seem to be explicitly forbidden from looking
> further than that even if we had an implementation of framing clauses.
> 
> This seems to be less than sane.  I would certainly expect that LEAD(x)
> gives you the next value of x regardless of peer-row status, since
> LAG(x) gives you the prior value of x regardless of peer row status.
> It is also simply bizarre for FIRST_VALUE to give you the partition's
> first row when LAST_VALUE doesn't give you the partition's last row.
> 
> Are there any errata for SQL2008 yet?  Can anyone check the actual
> behavior of DB2 or other DBMS's that claim to implement these functions?
> 
> I notice that the current patch code seems to implement
> first/last/nth_value using the frame, but lead/lag using the partition,
> which doesn't conform to spec AFAICS ... but lead/lag on the frame
> doesn't actually appear to be a useful definition so I'd rather go
> with that than with what the letter of the spec seems to say.
> 
> Lastly, for a simple aggregate used with an OVER clause, the current
> patch seems to define the aggregate as being taken over the frame
> rather than the partition, but I cannot find anything in SQL2008 that
> lends any support to *either* definition.
> 
> Comments?  This all seems rather badly broken.

Was this dealt with?

--  Bruce Momjian  <bruce@momjian.us>        http://momjian.us EnterpriseDB
http://enterprisedb.com
 + If your life is a hard drive, Christ can be your backup. +


pgsql-hackers by date:

Previous
From: Bruce Momjian
Date:
Subject: Re: Pluggable Indexes (was Re: rmgr hooks (v2))
Next
From: Bruce Momjian
Date:
Subject: Re: plpgsql: numeric assignment to an integer variable errors out