I am missing something here.

I have two tables:

orders
        id

delivery_route_segments
        id,
        order_id,
        position,
        completed

I want to find the first uncompleted deliver_route_segment for each order, by 
position. Seems to me I ought to be able to do this:
        
SELECT
  o.id,
  FIRST_VALUE(drs.id)
FROM
  orders o JOIN
  delivery_route_segments drs ON (drs.order_id = o.id AND NOT drs.completed)
GROUP BY
  o.id
but I'm told I need an over clause.



So I try this:
SELECT
  o.id,
  FIRST_VALUE(drs.id) OVER (ORDER BY position ASC)
FROM
  orders o JOIN
  delivery_route_segments drs ON (drs.order_id = o.id AND NOT drs.completed)
GROUP BY
  o.id
here I'm told "drs.id must appear in the GROUP BY clause". This doesn't make 
sense to me; I shouldn't need to group by a value that's inside an aggregate 
function.



Tried this.
SELECT
  o.id,
  FIRST_VALUE(drs.id) OVER (PARTITION BY o.id ORDER BY position ASC)
FROM
  orders o JOIN
  delivery_route_segments drs ON (drs.order_id = o.id AND NOT drs.completed)
GROUP BY
  o.id
but it has the same problem.

I can solve this with a subquery, but:
- I'd still like to know what's wrong; and
- I expect the subquery to be slower (yes?)

Reply via email to