We reject the following query:
nconway=# create table abc (a int, b int, c int);
CREATE TABLE
nconway=# select distinct on (a) a, b, c from abc order by b, c, a;
ERROR: SELECT DISTINCT ON expressions must match initial ORDER BY
expressions
This works fine, of course:
nconway=# select distinct on (a) a, b, c from abc order by a, b, c;
a | b | c
---+---+---
(0 rows)
src/backend/parser/parse_clause.c notes:
/*
* If the user writes both DISTINCT ON and ORDER BY, then the
* two expression lists must match (until one or the other
* runs out). Otherwise the ORDER BY requires a different
* sort order than the DISTINCT does, and we can't implement
* that with only one sort pass (and if we do two passes, the
* results will be rather unpredictable). However, it's OK to
* have more DISTINCT ON expressions than ORDER BY
* expressions; we can just add the extra DISTINCT values to
* the sort list, much as we did above for ordinary DISTINCT
* fields.
*
* Actually, it'd be OK for the common prefixes of the two
* lists to match in any order, but implementing that check
* seems like more trouble than it's worth.
*/
Does this strike anyone else as being wrong?
-Neil
---------------------------(end of broadcast)---------------------------
TIP 2: you can get off all lists at once with the unregister command
(send "unregister YourEmailAddressHere" to [EMAIL PROTECTED])