Re: Frames vs partitions: is SQL2008 completely insane?
От | Bruce Momjian |
---|---|
Тема | Re: Frames vs partitions: is SQL2008 completely insane? |
Дата | |
Msg-id | 200901212356.n0LNusw17786@momjian.us обсуждение исходный текст |
Ответ на | Frames vs partitions: is SQL2008 completely insane? (Tom Lane <tgl@sss.pgh.pa.us>) |
Ответы |
Re: Frames vs partitions: is SQL2008 completely insane?
|
Список | 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 по дате отправления: