With a query like this (simplified for clarity):
SELECT \'East\' AS name, *
FROM events
WHERE event_timestamp BETWEEN \'2015-06-14 06:15:00\' AND \'2015-06-21 0
I'd add an extra column showing the desired ordering, then use ordinal column positions in the ORDER BY
, e.g.
SELECT 1, 'East' AS name, *
...
UNION ALL
SELECT 2, 'West' AS name, *
...
ORDER BY 1
Note that you probably also want UNION ALL
since your added columns ensure that every set in the union must be distinct anyway.
Wrap it in a derived table (which is what "HINT: .... or move the UNION into a FROM clause" is suggesting)
select *
from (
... your union goes here ...
) t
order by
CASE
WHEN name='East' THEN 1
WHEN name='West' THEN 2
WHEN name='Both' THEN 3
ELSE 4
END;
By adding an extra column for ordering purpose, however it makes the UNION clause to work exactly as a UNION ALL (it does not eliminate duplicate rows from the result).