SELECT a,b,c,row_number()OVER (PARTITION BY a) -- Do I need an ORDER BY c,b here?
Yes.
FROM fooORDER BY c,b
Also, I'm interested in both what if any behavior is guaranteed, and what gets done in practice. (i.e., a SELECT with no order doesn't have guarantees, but in practice seems to return the results in the order they were added to the table. Is it something similar here?)
Row numbers would be assigned in the order they are sent up by the "from foo" clause.
In practice what gets done depends on the execution plan that is chosen and nothing is guaranteed unless you specify it in the query so that the execution plan can enforce it.
David J.