I have this SELECT clause as part of a larger query:
FIRST_VALUE(drs.id) OVER (PARTITION BY drs.order_ID ORDER BY drs.position ASC) AS current_drs_id
Seems reasonable to me: group and sort the fields in this table and give me the first value.
But I get "column "drs.id" must appear in the GROUP BY clause or be used in an aggregate function".
Huh?
The larger query would help…
SELECT o.id, os.status AS status, o.status_updated_at, o.should_hold_at_airlines, (SELECT drs2.id FROM delivery_route_segments drs2 WHERE drs2.order_id = o.id AND NOT drs2.completed ORDER BY drs2.position LIMIT 1) AS current_drs_id,
FROM orders o JOIN order_statuses os ON (o.status = os.id) JOIN delivery_route_segments drs ON (drs.order_id = o.id) JOIN pick_up_addresses pua ON (pua.order_id = o.id) GROUP BY o.id, os.status
I would prefer to do the subquery as a window function, both because that is cleaner to read and also because I believe it is likely to be more efficient.
This query is non-functional. It has a GROUP BY without any aggregate functions and not all of the selected columns are in the group by.